0

を で割っているときに問題に直面doubleしていintます。コード スニペットは次のとおりです。

  double db = 10;
  int fac = 100;
  double res = db / fac;

res の値は0.10000000000000001ではなく です0.10

誰かがこれの理由を知っていますか? cc を使用してコードをコンパイルしています。

4

3 に答える 3

10

古典的な論文What Every Computer Scientist Should Know About Floating-Point Arithmeticを読む必要があります。

于 2010-06-16T06:40:20.987 に答える
4

CPU は数値の 2 進数表現を使用します。結果をバイナリで正確に表すことはできません。バイナリの 0.1 は 0.00011001100110011 です... CPU は特定の時点でそれを切り捨て、丸め誤差を取得します。

于 2010-06-16T06:41:12.893 に答える
0

double は浮動小数点演算子であり、正確な値を提供しません。Googleで精度と浮動小数点演算子を調べてください。

于 2010-06-16T06:36:51.857 に答える