0

重複の可能性:
float の合計が正確ではありません

だから私はコードを持っています:

#include <iostream>
using std::cout;
using std::endl;

int main () {
   float x = 0.0001;
   float y = 0;
   for (int i=0; i < 10000; i++) {
      y += x;
   }
   cout << y << endl;
   return 0;
}

出力が 1 になることを期待していますが、1.00005 になっています。コードを多かれ少なかれ同じに保ちながら「1」を取得するには、何を変更する必要がありますか?

4

2 に答える 2

2

2 進浮動小数点数は、考えられるすべての 10 進有理数を正確に表すことはできません。できない場合、丸め誤差が発生します。これらの丸め誤差の蓄積が見られます。

于 2012-10-15T19:53:51.543 に答える
1
int main () {
   int x = 1;
   int y = 0;
   for (int i=0; i < 10000; i++) {
      y += x;
   }
   cout << y/10000.0 << endl;
   return 0;
}

整数は正確ですが、浮動小数点数はしばしばそうではありません。正確さが必要な場合、小数ライブラリを使用せずに最も簡単な方法は、必要になるまで数学を整数ドメインに保持することです。

于 2012-10-15T20:03:52.993 に答える