slo*_*o95 0 c++ double decimal
我试图做一个elipsoid,这样做我需要以下操作
float result = this->eValues[0]+this->eValues[2]-this->eValues[1]
Run Code Online (Sandbox Code Playgroud)
在这种情况下
eValues[0]=-1.86265e-09;
eValues[1]=8.999999;
eValues[2]=8.999999;
Run Code Online (Sandbox Code Playgroud)
它应该返回-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;
}
Run Code Online (Sandbox Code Playgroud)
第一个输出产生0的原因是因为-1.86265e-09相对于非常小8.999999.浮点数如何存储的指数差异太大,浮点数不能产生正确的算术答案
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |