.NET C#Double等效System.Numerics.BigInteger

时间:2011-03-04 04:53:35

标签: c# .net pi

我正在编写一个计算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");
}

2 个答案:

答案 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)并逐位计算数字。