簡體   English   中英

.NET C#雙等效項System.Numerics.BigInteger

[英].NET C# Double equivalent System.Numerics.BigInteger

我目前正在編寫一個計算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");
}

BigInteger類由BCL團隊的Melitta Andersen編寫,這是她的第一個項目。 它實際上是在.NET 3.5中提供的,但已被隱藏,該類被標記為internal 直到.NET 4.0才公開。 她還編寫了一個名為BigRational的浮點版本。 類似的問題,沒有進入.NET 4.0。 這些是我不了解其推理的奇怪而無法解釋的決定。

但是,仍然可以使用BigRational的源代碼。 您可以在這里下載。

如果你想計算圓周率的精確數字的任意號碼,然后可用的數字類型的將是有效的。 您將必須使用字符串(最好是StringBuilder )並逐位計算數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM