我知道用浮点数进行数学运算可能很奇怪,因为浮点数不能总是正确地用二进制表示,然后再转换回去。但是,以下代码包含相同的简单等式3“不同”的方式。我之所以说“不同”,是因为它是相同的方程式,但顺序相同,只是键入的样式不同。如果它执行相同的从float到二进制再转换回float的显示,那么它又有什么不同呢?这是c ++代码:
#include <iostream>
using namespace std;
int main() {
// using literal numbers
cout << 0.1 + 0.1 + 0.1 - 0.3 << endl;
float f_one = 0.1;
float f_three = 0.3;
// using floats
cout << f_one + f_one + f_one - f_three << endl;
double d_one = 0.1;
double d_three = 0.3;
// using doubles
cout << d_one + d_one + d_one - d_three << endl;
return 0;
}
此代码的输出是
5.55112e-017
-7.45058e-009
2.77556e-017
我可以理解,这是我们所期望的float和double之间的差异。但是,至少其中之一不应该与
获得的结果相匹配cout << 0.1 + 0.1 + 0.1 - 0.3 << endl;
?
还有什么可能导致这种差异?