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
您可以使用更简单的代码重现您的"浮动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初始化的值不匹配.
正如已多次说明的那样,浮点类型的精度有限.您的代码示例只是超出了该精度,因此结果得到了舍入.这里没有"错误".
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |