3

小数点以下 16,000 を超える数の pi を作成したいのですが、問題は、自分の希望を満たすことができる型が見つからないことです。オブジェクトを使用しようとしましたが、文字列を使用すると思った10以降の数値を丸めますが、文字列型はマイナスまたはプラスを行うことができず、intに変換すると丸くなります。私が使用できる他のタイプを知っていますか、またはたとえば http://files.extremeoverclocking.com/file.php?f=36などの文字列で機能させるにはどうすればよいですか?このプログラムは最大3200万を計算できます

thnx

4

1 に答える 1

5

このページを見てください。それはBigNumberクラスです。

最初に注意すべきことは、C# ではどのプリミティブ型も使用できないということです。それらには十分な精度がありません (たとえば、double 型は有効桁数が 15 桁しかなく、計算したい、たとえば、 10000)。大精度の数値ライブラリが必要ですが、.NET Framework にはそのようなものはありません。したがって、最初に行う必要があるのは、BigNumber クラスを作成することです。

このページには、小数点以下 1000 桁までのpiを計算するための使用例も示されているため、16000 に対して実行するのはかなり簡単です。


16000 桁の場合は約 1 秒半かかり、160,000 桁の場合は 2 分強かかります。

PrintAsTable()リンクされた投稿が読者の演習として残している私の関数は次のとおりです。

public string PrintAsTable() {
    var data = Print();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.Length; i++)
    {
        if (data[i] == '.') sb.AppendLine(".");
        else if ((i -1) % 50 == 0) sb.AppendLine(data[i].ToString());
        else if ((i -1) % 10 == 0) {sb.Append(data[i].ToString()); sb.Append(" ");}
        else sb.Append(data[i].ToString());
    }
    return sb.ToString();
}
于 2013-05-20T19:17:30.633 に答える