internetofmine
internetofmine

Reputation: 198

Large factorial using BigIntegers losing precision

It'sa me, with another problem.

I need to calculate a factorial of a really huge number, lets assume it is 95. So as we all know 95! equals to:

10329978488239062144133688859495761720042551046933218543167809699858950620982142410696539365993509132394773015016946331626553858953528454377577119744

I have used a simple method calculating factorials using BigIntegers that I found somewhere around here few months ago:

public static BigInteger FactorialTest(BigInteger x)
{
    if (x == 0)
        return 1;

    BigInteger res = x;
    x--;
    while (x > 1)
    {
        res *= x;
        x--;
    }
    return res;
}

And only got a rounded up number:

10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000

Next step was using the builtin BigInteger methods for addition, multiplication etc, hoping it will fix the problem - no still did not work.

Last thing I tried was using code of someone smarter, so reached for SolverFoundation, unfortunately

Microsoft.SolverFoundation.Common.BigInteger.Factorial(95)

still returns the rounded up number.

Is there anything I am missing that could get me the proper result? I really hoped BigIntegers would not lose precision like that.

Upvotes: 1

Views: 192

Answers (1)

abydal
abydal

Reputation: 388

According to http://2000clicks.com/MathHelp/BasicFactorialTable.aspx and other sites the number you are getting from your calculation is correct.

Upvotes: 4

Related Questions