使用 BigIntegers 的大阶乘失去精度

Large factorial using BigIntegers losing precision

是我,还有一个问题。

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

10329978488239062144133688859495761720042551046933218543167809699858950620982142410696539365993509132394773015016946331626553858953528454377577119744

几个月前我在附近的某个地方发现了一种使用 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 方法进行加法、乘法等操作,希望它能解决问题 - 还是不行。

我尝试的最后一件事是使用更聪明的人的代码,所以很不幸地达到了 SolverFoundation

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

仍然是returns四舍五入的数字。

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

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