我目前正在编写一个计算 pi 位数的程序,但我遇到了问题。三次迭代后,正确数字的数量超过了双倍可用的内存。
我听说过 System.Numerics.BigInteger 类型(在 System.Numerics.dll 中),但我需要使用浮点数。我对算法的理解不够好,无法使用整数。
如果存在支持小数点的 BigInteger 版本,那就太好了。下面我放了我的 C# 代码:
var a = 1.0;
var b = 1 / Math.Sqrt(2);
var t = 0.25;
var p = 1.0;
double anext, bnext, tnext, pnext;
int count = 0;
for (int i = 1; i <= accuracy; i++ )
{
anext = (a + b) / 2;
bnext = Math.Sqrt(a * b);
tnext = (t - p * ((a - anext) * (a - anext)));
pnext = 2 * p;
a = anext;
b = bnext;
t = tnext;
p = pnext;
var pi = ((a + b) * (a + b)) / (4 * t);
Console.WriteLine("Iteration = " + i.ToString());
Console.WriteLine("Pi = " + pi + "\n\n\n\n");
}