c++ - float 不准确

标签 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 之前是正确的。解决这个问题的正确方法是什么?

最佳答案

您的示例输出只是看起来 是错误的,因为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/

相关文章:

c++ - 如何检查用户是否给出了正确的数据类型

c - 二进制中的浮点表示

c++: 捕获 runtime_error

c++ - 如何在 C++ 中获取整数的位长度?

c++ - 如何使用 SIFT 特征/描述符作为 SVM 训练的输入?

c++ - 如何实现一个以其索引为 2 开头的数组

c - memset(ary,0,length) 是一种在双数组中输入零的可移植方式

perl - 等于 5 的四舍五入 float

floating-point - 检查 float 是否包含小数

c# - 了解 float 问题