奇怪的C++浮动bug

Gur*_*sad 5 c++ floating-point

#include <iostream>
using namespace std;

int main()
{
    cout.precision(32);

    float val = 268433072;
    float add = 13.5;

    cout << "result =" << (val + add) << endl;
}
Run Code Online (Sandbox Code Playgroud)

我用标准编译上面的程序g++ main.cc
并运行它./a.out

然而,我收到的输出是,
result =268433088

显然,这不是正确答案.为什么会发生这种情况?

编辑:使用double代替时不会发生这种情况float

AnT*_*AnT 8

您可以使用更简单的代码重现您的"浮动bug"

#include <iostream>
using namespace std;

int main()
{
    cout.precision(32);
    float val = 2684330722;
    cout << "result =" << val << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出

result =2684330752
Run Code Online (Sandbox Code Playgroud)

如您所见,输出与val初始化的值不匹配.

正如已多次说明的那样,浮点类型的精度有限.您的代码示例只是超出了该精度,因此结果得到了舍入.这里没有"错误".