note
Albannach
Not only is [mdillon]'s solution correct, it's also much more
efficient as each factorial is simply one multiply on the
previous one, whereas calling the function each time means a lot more
work is being done.
<p>
Now the reason for the failure is that the [CPAN://Math::NumberCruncher|Math::NumberCruncher]
function overflows for 171!. Unfortunately it returns '1.#INF' which
Perl happily treats as 1.0 in your division, so you simply divide by
one from that point on, not making much more progress.
<p>
<b>Update: </b>While [CPAN://Math::NumberCruncher|Math::NumberCruncher]
does not use BigFloats for it's factorial function, it does
already use the [CPAN://Math::BigFloat|Math::BigFloat] module
for storing its very large version of $PI (though strangely BigFloats are not used
in calculations with that $PI so it's probably pointless...), so it is a
trivial matter to patch [CPAN://Math::NumberCruncher|Math::NumberCruncher]
to use a BigFloat for the factorial. This is of course for occasional uses
as for an iterative use of factorial [mdillon]'s answer is still
much faster.
<p>--<br>
I'd like to be able to assign to an luser
97512
97512