今天,我浏览了一些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操作也会累积比该错误大的错误。