On Fri, Sep 17, 2021 at 11:12:45AM +0300, Serhiy Storchaka wrote:
> 17.09.21 05:23, Steven D'Aprano пише:
> >>>> factorial(23) == better_factorial(23)
> > False
> >
> > The problem is that since floats only have about 17 significant figures
> > or so, once you get to 23! the gamma function doesn't have enough
> > precision to give an exact answer. Of course that's easily fixable.
> > (Only call gamma if the input argument is a float.)
>
> It is not even easily fixable.
Yes, good point, the things you mention (monotonicity especially) would
be an problem.
But I don't think it would be a big problem unless the caller was mixing
calls to gamma with int and float arguments. If you stick to one or the
other, it wouldn't matter.
Or if we had automatic simple type dispatch, we could define:
def factorial(n: int) -> int:
# current integer-only implementation
def factorial(x: float) -> float:
return x*gamma(x)
and nobody would care that the two factorial functions had different
performance and precision characteristics.
--
Steve
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/TLZJIL6S54ELCRVGAFLCNSXWQRDJS2NB/
Code of Conduct: http://python.org/psf/codeofconduct/