0

可能重复:
浮点数的总和不准确

所以我有代码:

#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

二进制浮点数不能准确表示所有可能的十进制有理数。如果不能,则会发生舍入错误。您会看到这些舍入错误的累积。

于 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 回答