1

私は現在、円周率の桁数を計算するプログラムを書いていますが、問題があります。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");
}
4

2 に答える 2

8

BigInteger クラスは、彼女の最初のプロジェクトである BCL チームの Melitta Andersen によって作成されました。実際には .NET 3.5 で出荷されましたが、非表示になっており、クラスはinternalとマークされていました。.NET 4.0 まで公開されません。彼女はまた、BigRational と呼ばれる浮動小数点バージョンも作成しました。同様の問題は、.NET 4.0 には反映されませんでした。これらは奇妙で説明のつかない決定であり、その理由は私にはわかりません。

それでも、BigRational のソース コードは利用可能です。ここからダウンロードできます。

于 2011-03-04T07:57:50.467 に答える
4

Pi を任意の桁数の精度で計算しようとしている場合、使用可能な数値型はどれも有効ではありません。文字列 (または、できれば a StringBuilder) を使用して、数字を 1 桁ずつ計算する必要があります。

于 2011-03-04T04:57:13.070 に答える