5

このコードを考えてみましょう:

double result = Math.Sqrt(4746073226998689451);

結果として、2178548421.99999954などの代わりに2178548422を取得します...より正確な結果を取得するにはどうすればよいですか?

4

4 に答える 4

7

ウィキペディアで言及されている.NET用の高精度の数学ライブラリがたくさんあります-任意-percisionartithmaticページ。

ウィキペディアのリンクが壊れていて、現在他の場所でライブラリを見つけることができませんが、BigNumがここで推奨されているのを見たことがあります。

このページの他のオプションは、MPIRのC#バインディングです

于 2011-11-13T18:27:47.253 に答える
6

平方根を計算する特定の問題については、10進型とニュートンのアルゴリズムを使用できます。

using System;

class Program
{
  public static void Main()
  {
    long x = 4746073226998689451;
    decimal sqrt_x = (decimal)Math.Sqrt(x);
    for (int i = 0; i < 10; ++i)
      sqrt_x = 0.5m * (sqrt_x + x / sqrt_x);
    Console.WriteLine("{0:F16}", sqrt_x);
  }
}

結果は次のとおりです。

2178548421.9999998547197773
于 2011-11-13T18:35:49.617 に答える
1

桁ごとの計算を使用すると、探している桁数が得られます。

于 2011-11-13T18:27:13.653 に答える
1

doubleの代わりに、大きな整数を試して、このリンクもチェックしてください

分数をサポートする大きな数値

于 2011-11-13T18:33:33.587 に答える