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

1 .net c# 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");
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 7

BigInteger课程由BCL团队的Melitta Andersen编写,这是她的第一个项目.它实际上是在.NET 3.5中运行但是被隐藏了,该类被标记为内部.在.NET 4.0之前不要公开.她还写了一个名为BigRational的浮点版本.类似的问题,没有进入.NET 4.0.这些是奇怪而无法解释的决定,其推理我并不知情.

不过,BigRational的源代码是可用的.你可以在这里下载.