【发布时间】:2018-03-16 13:22:32
【问题描述】:
我写了一个使用无穷级数计算 PI(π)的方法:
public static decimal NilakanthaGetPI(ulong n)//Nilakantha Series
{
decimal sum = 0;
decimal temp = 0;
decimal a = 2, b = 3, c = 4;
for (ulong i = 0; i < n; i++)
{
temp = 4 / (a * b * c);
sum += i % 2 == 0 ? temp : -temp;
a += 2; b += 2; c += 2;
}
return 3 + sum;
}
该方法运行良好,直到迭代次数达到几十亿,这给了我一个 OverflowException,这是合乎逻辑的,因为 temp 的值大于 decimal 类型可以容纳的值。我想到了使用BigInteger,但我不能进行除法temp = 4 / (a * b * c)。使用这种方法,我可以计算PI 的前25 位十进制数字(decimal type 可以存储28 或29 位十进制数字)。有没有办法修改这个方法,使它可以计算更多的 PI 位数?
【问题讨论】:
-
您可以使用this 公式。它可能会很慢,但您不需要存储每个数字。
-
@FCin 我真的不需要计算 PI,我只是好奇如何修改这个方法,以便它可以计算更多位数的 PI。