使用BigIntegers的大型阶乘会失去精度

时间:2018-08-23 09:28:46

标签: c# .net biginteger factorial

是我,还有另一个问题。

我需要计算一个非常大的阶乘,假设它是95。 因此众所周知 95!等于:

  

10329978488239062144133688859495761720042551046933218543167809699858950620982142410696539365993509132394773015015046346326526558958953528454377577119744

我使用了一个简单的方法,该方法使用几个月前在附近发现的BigIntegers来计算阶乘:

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

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

只有一个四舍五入的数字:

  

10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000

下一步是使用内置的BigInteger方法进行加法,乘法等,希望它可以解决问题-仍然没有用。

不幸的是,我最后尝试使用的是更聪明的人的代码

  

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

仍然返回四舍五入的数字。

我缺少什么可以让我得到正确结果的东西吗?我真的希望BigIntegers不会像那样失去精度。

1 个答案:

答案 0 :(得分:4)

根据http://2000clicks.com/MathHelp/BasicFactorialTable.aspx和其他网站,您从计算中获得的数字是正确的。