On 2020-06-18 09:43, Juan José Santamaría Flecha wrote: > The gamma function from math.h returns a NaN for negative integer > values, the postgres factorial function returns a numeric, which allows > NaN. Raising an out-of-range error seems only reasonable for an integer > output.
But this is not the gamma function. The gamma function is undefined at zero, but factorial(0) returns 1. So this is similar but not the same.
factorial(n) = gamma(n + 1)
Moreover, functions such as log() also error out on unsupportable input values, so it's consistent with the spec.
If factorial() ever gets extended to other input types it might get inconsistent, should !(-1.0) also raise an error?