使用 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 和其他网站,您从计算中得到的数字是正确的。
是我,还有一个问题。
我需要计算一个非常大的数的阶乘,假设它是 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 和其他网站,您从计算中得到的数字是正确的。