質問

私は、コードを持っている、と私はそれを理解していません。私は精度が非常に重要であるアプリケーションを開発しています。それは、なぜ、.NETのために重要ではないのですか?私は知りません。

double value = 3.5;
MessageBox.Show((value + 1 * Math.Pow(10, -20)).ToString());

が、メッセージボックスが表示さ:3.5 私を助けてください、ありがとうございます。

役に立ちましたか?

解決

あなたは精度を持つことができますが、それはあなたがしたい他に何に依存します。あなたがコンソールアプリケーションで次のように置く場合:

double a = 1e-20;
Console.WriteLine(" a  = {0}", a);
Console.WriteLine("1+a = {0}", 1+a);

decimal b = 1e-20M;
Console.WriteLine(" b  = {0}", b);
Console.WriteLine("1+b = {0}", 1+b);

あなたが取得します。

 a  = 1E-20
1+a = 1
 b  = 0,00000000000000000001
1+b = 1,00000000000000000001

しかしPow関数は、Mathクラスのほぼすべてのもののように、唯一のダブルスを取ることに注意します:

double Pow(double x, double y);

だから、(doubleに変換することにより、他の)小数点以下の正弦を取ることができない。

また、をhref="https://stackoverflow.com/questions/803225/when-should-i-use-double-instead-of-decimal">見ます。

他のヒント

あなたは精度が非常に重要である何かをやっている場合は、浮動小数点の限界を認識する必要があります。良いの参照ですデビッド・ゴールドバーグの「すべてのコンピュータ科学者は、浮動小数点演算について知っておくべきこと「を。

あなたは浮動小数点はあなたに十分な精度が得られないと、あなたがdecimal型で作業する必要があることがあります。これらは、しかし、常に浮動小数点よりもはるかに遅いです - それは精度と速度の間のトレードオフです。

Doubleの精度は15桁(内部17桁)です。あなたはMath.Powで計算した値が正しいですが、あなたはそれをvalueに追加するときだけで違いを確認するためには小さすぎる。

編集:
10進その精度はなく、計算を処理することができます。あなたはその精度が必要な場合は、計算を行う必要があり、それらを一緒に追加する前にDecimalに各値を変換します:

double value = 3.5;
double small = Math.Pow(10, -20);

Decimal result = (Decimal)value + (Decimal)small;

MessageBox.Show(result.ToString());

または進するを使用ダブルではなく、入力します。

倍精度それが15〜16個の数字を保持できることを意味します。 3.5 + 1E-20 = 21桁。それは、二重precicionで表現することはできません。あなたは、小数点以下のような別のタイプを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top