在浮点数上进行数学运算时,为什么对同一个方程式会得到3个不同的结果?

时间:2019-01-21 04:24:16

标签: c++

我知道用浮点数进行数学运算可能很奇怪,因为浮点数不能总是正确地用二进制表示,然后再转换回去。但是,以下代码包含相同的简单等式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;

还有什么可能导致这种差异?

0 个答案:

没有答案