今天,我浏览了一些C ++代码(由其他人编写),发现了这一部分:
double someValue = ...
if (someValue < std::numeric_limits<double>::epsilon() &&
someValue > -std::numeric_limits<double>::epsilon()) {
someValue = 0.0;
}
我试图弄清楚这是否有意义。
文档epsilon()
说明:
该函数返回1与大于1的最小值之间的差,该差可表示[双精度数]。
这是否也适用于0,即epsilon()
最小值是否大于0?或者在其间数0
和0 + epsilon
可以由代表double
?
如果不是,那么比较不等于someValue == 0.0
?
numeric_limits<>::epsilon
误导性且无关紧要。如果实际值与0相差不超过ε,我们要假设0。应该根据问题说明而不是与机器有关的值来选择ε。我怀疑当前的epsilon是无用的,因为即使只有几个FP操作也会累积比该错误大的错误。