![](/img/trans.png)
[英]converting int to/from System.Numerics.BigInteger in C#
[英].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.