Emi*_*son 7 floating-point precision double comparison equality
我知道由于精度错误而测试浮点数是否有危险但是测试零是否安全?我可以想到一些情况,例如在优化算法中的特殊情况时,您可能希望这样做.问题是关于花车,但我认为答案也适用于双打.
请考虑以下代码:
float factor = calculateFactor();
if(factor != 0.0f)
applyComplexAlgorithm(factor);
Run Code Online (Sandbox Code Playgroud)
小智 8
从某种意义上讲,如果将值明确设置为0.0f,那么它将是安全的.
从某种意义上说,你不应该期望计算得到的值恰好是0.0f,这是不安全的.
所以你真的使用0.0f作为排序的特殊魔法值,而不是与零的真实比较.
不,这不安全,因为calculateFactor()即使通过算术计算,计算结果也可能不会导致0.0.一个简单的例子:(0.4-0.1)-0.3使用double5.551115123125783e-17中的结果完成