我正在编写一个计算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");
}
答案 0 :(得分:7)
BigInteger课程由BCL团队的Melitta Andersen编写,这是她的第一个项目。它实际上是在.NET 3.5中提供的,但是被隐藏了,该类被标记为 internal 。在.NET 4.0之前不要公开。她还写了一个名为BigRational的浮点版本。类似的问题,没有进入.NET 4.0。这些是奇怪的,无法解释的决定,其推理我并不知情。
然而,BigRational的源代码是可用的。您可以下载it here。
答案 1 :(得分:4)
如果您尝试将Pi计算为任意数量的精度数字,则可用数字类型的 none 将有效。您将不得不使用字符串(或者,最好是StringBuilder
)并逐位计算数字。