在编写一个将对范围内的每个数字执行某些操作的函数时,我遇到了一些浮点不准确的问题。问题可以在下面的代码中看到:
#include <iostream>
using namespace std;
int main()
{
double start = .99999, end = 1.00001, inc = .000001;
int steps = (end - start) / inc;
for(int i = 0; i <= steps; ++i)
{
cout << (start + (inc * i)) << endl;
}
}
问题是上面程序输出的数字是这样的:
0.99999
0.999991
0.999992
0.999993
0.999994
0.999995
0.999996
0.999997
0.999998
0.999999
1
1
1
1
1
1.00001
1.00001
1.00001
1.00001
1.00001
1.00001
它们似乎只在第一个 1 之前是正确的。解决这个问题的正确方法是什么?
最佳答案
您的示例输出只是看起来 是错误的,因为ostream
默认情况下是如何舍入的。您可以设置 precision
以获得一些其他输出。
cout.precision(10);
cout << (start + (inc * i)) << endl;
这是我现在得到的:
0.99999
0.999991
0.999992
0.999993
0.999994
0.999995
0.999996
0.999997
0.999998
0.999999
1
1.000001
1.000002
1.000003
1.000004
1.000005
1.000006
1.000007
1.000008
1.000009
1.00001
关于c++ - float 不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575643/