Hi!
I think having gamma() and lgamma() functions in PostgreSQL would be
useful for some users, this is asked [1].
I have a question regarding the current implementation of gamma()
function. Code block:
+ if (errno == ERANGE && arg1 != 0)
+ {
+ if (result != 0.0)
+ float_overflow_error();
+ else
+ float_underflow_error();
+ }
+ else if (isinf(result) && arg1 != 0 && !isinf(arg1))
+ float_overflow_error();
+ else if (result == 0.0)
+ float_underflow_error();
Why in some cases (if arg1 is close to 0, but not 0) an error
(float_overflow_error) will be returned, but in the case of "arg1 = 0"
the value 'Infinity' will be returned?
For example:
>SELECT gamma(float8 '1e-320');
ERROR: value out of range: overflow
>SELECT gamma(float8 '0');
gamma
----------
Infinity
(1 row)
Perhaps it would be logical if the behavior in these cases was the same
(either ERROR or 'Infinity')?
Links:
[1]
https://stackoverflow.com/questions/58884066/how-can-i-run-the-equivalent-of-excels-gammaln-function-in-postgres
--
With best regards,
Dmitry Koval
Postgres Professional: http://postgrespro.com