Method: Math#lgamma
- Defined in:
- math.c
#lgamma(x) ⇒ Array, ... (private)
Returns a 2-element array equivalent to:
[Math.log(Math.gamma(x).abs), Math.gamma(x) < 0 ? -1 : 1]
See {logarithmic gamma function}[https://en.wikipedia.org/wiki/Gamma_function#The_log-gamma_function].
- Domain: <tt>(-INFINITY, INFINITY]</tt>.
- Range of first element: <tt>(-INFINITY, INFINITY]</tt>.
- Second element is -1 or 1.
Examples:
lgamma(-4.0) # => [Infinity, -1]
lgamma(-3.0) # => [Infinity, -1]
lgamma(-2.0) # => [Infinity, -1]
lgamma(-1.0) # => [Infinity, -1]
lgamma(0.0) # => [Infinity, 1]
lgamma(1.0) # => [0.0, 1]
lgamma(2.0) # => [0.0, 1]
lgamma(3.0) # => [0.6931471805599436, 1]
lgamma(4.0) # => [1.7917594692280545, 1]
lgamma(-2.5) # => [-0.05624371649767279, -1]
lgamma(-1.5) # => [0.8600470153764797, 1]
lgamma(-0.5) # => [1.265512123484647, -1]
lgamma(0.5) # => [0.5723649429247004, 1]
lgamma(1.5) # => [-0.12078223763524676, 1]
lgamma(2.5) # => [0.2846828704729205, 1]
Related: Math.gamma.
1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 |
# File 'math.c', line 1019
static VALUE
math_lgamma(VALUE unused_obj, VALUE x)
{
double d;
int sign=1;
VALUE v;
d = Get_Double(x);
/* check for domain error */
if (isinf(d)) {
if (signbit(d)) domain_error("lgamma");
return rb_assoc_new(DBL2NUM(HUGE_VAL), INT2FIX(1));
}
if (d == 0.0) {
VALUE vsign = signbit(d) ? INT2FIX(-1) : INT2FIX(+1);
return rb_assoc_new(DBL2NUM(HUGE_VAL), vsign);
}
v = DBL2NUM(lgamma_r(d, &sign));
return rb_assoc_new(v, INT2FIX(sign));
}
|