C++ 浮点误差

C++ 浮点误差,c++,floating-point,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; ++

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

#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;
    }
}
它们仅在第一个1之前看起来是正确的。解决此问题的正确方法是什么?

您的示例输出看起来只是错误的,因为ostream在默认情况下是如何循环的。您可以设置精度以获得其他输出

cout.precision(10);
cout << (start + (inc * i)) << endl;
您的示例输出看起来只是错误的,因为ostream在默认情况下是如何循环的。您可以设置精度以获得其他输出

cout.precision(10);
cout << (start + (inc * i)) << endl;

但在你给出的范围内有20步。这里没有错误。你当然是对的;我已经改变了我的问题,所以它现在应该更有意义了。每个计算机科学家都应该知道浮点运算:但是在你给出的范围内有20个步骤。这里没有错误。你当然是对的;我已经改变了我的问题,所以它现在应该更有意义了。每个计算机科学家都应该知道的关于浮点运算的知识:当然,如果你提高足够的精度,你就会发现二进制FP数不能非常准确地存储小数;当然,如果你提高足够的精度,你就会发现二进制FP数不能非常准确地存储小数;
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