浮点不准确

时间:2011-01-01 20:30:21

标签: c++ floating-point

在编写一个函数,该函数将对某个范围内的每个数字执行某些操作时遇到浮点不准确的一些问题。问题可以在下面的代码中看到:

#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.解决此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

由于默认情况下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

答案 1 :(得分:0)