私は現在、円周率の桁数を計算するプログラムを書いていますが、問題があります。3 回繰り返した後、正しい桁数が double で使用可能なメモリを超えています。
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");
}