浮动类型功能

时间:2012-10-15 19:47:53

标签: c++ floating-point decimal

  

可能重复:
  Sum of float is not exact

所以我有代码:

#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”保持代码大致相同?

2 个答案:

答案 0 :(得分:2)

二进制浮点数不能完全代表每个可能的十进制有理数。如果不能,则会发生舍入错误。你看到这些四舍五入错误的累积。

答案 1 :(得分: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;
}

整数是精确的,浮点数通常不是。如果你需要精确,不使用十进制库的最简单方法是将数学保持在整数域中,直到你需要它为止。