浮点加法,不包括十进制c++



我试图做一个椭球,这样做,我需要以下操作

float result = this->eValues[0]+this->eValues[2]-this->eValues[1]

eValues[0]=-1.86265e-09;
eValues[1]=8.999999;
eValues[2]=8.999999;

它应该返回-1.86265e-09,但结果是0

谢谢

这是一个浮点精度问题,通过执行加法的顺序可以更清楚地看出:

#include <iostream>
int main() {
        float a = -1.86265e-09;
        float b = 8.999999;
        float c = 8.999999;
        std::cout << ((a + b) - c) << std::endl; // 0
        std::cout << (a + (b - c)) << std::endl; // -1.86265e-09
        return 0;
}

第一个输出产生0的原因是-1.86265e-09相对于8.999999非常小。浮点数存储方式的指数差异太大,浮点数无法产生正确的算术答案

最新更新