所以我有代码:
#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”保持代码大致相同?
答案 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;
}
整数是精确的,浮点数通常不是。如果你需要精确,不使用十进制库的最简单方法是将数学保持在整数域中,直到你需要它为止。