That's a question for Tim Peters. On Sun, Sep 8, 2019 at 9:48 PM Andrew Barnert via Python-ideas < python-ideas@python.org> wrote:
> On Sep 7, 2019, at 18:07, davidgmoril...@gmail.com wrote: > > > > Since the gamma function (see > https://en.wikipedia.org/wiki/Gamma_function) is defined for complex > numbers too, wouldn't it be normal to have it implemented on the `cmath` > module? The `math` module has this function, but it doesn't support complex > numbers (as expected). > > I believe this is just because math and cmath started off mostly thin > wrappers around the C stdlib functions, and C had a gamma for double but > not for complex. > > (Actually, IIRC, it’s a bit more complicated, more like “what POSIX > guaranteed that Windows also provided as of the mid 90s”, which goes beyond > the C89 standard but doesn’t match the C99 standard.) > > But that doesn’t mean it couldn’t be added. The `math` and `cmath` modules > have added lots of things over the decades that are useful and aren’t thin > wrappers, like `fsum` and `isclose`, and hasn’t included everything that > was added in later versions of C or POSIX. > > In fact, math.gamma itself is effectively one of those things; it’s no > longer a wrapper around a libm function, but a custom Lancsoz > implementation that gives the same values on all platforms. > > But on the third hand, you’d presumably want cmath.gamma to give the same > values as math.gamma for compatible inputs. And the algorithm in > mathmodule.c doesn’t translate smoothly to complex. I believe libraries > like GSL deal with this by using a different algorithm that does translate > smoothly, for both real and complex values, but that means giving up either > speed or accuracy or both. > > I did some quick tests on scipy.special.gamma. It takes roughly 12x as > long as math.gamma, and gives larger errors (within 3 ulp instead of 1 even > near 1, and as much as 117ulp instead of no more than 10 for extreme > values), and doesn’t give the same values for float and complex (e.g., for > 1/3, they differ by 6ulp). Is that good enough for the stdlib? > > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/SXQ3V4ZKSKELLWUZESXHMCL7NTBUL4AX/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him/his **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/SIK5VCLIMWUPYGHSXQ7YWKOY2B5L6KOE/ Code of Conduct: http://python.org/psf/codeofconduct/