我正在使用 double 求解一个方程,我得到的是 -7.07649e-17
而不是 0
。
我同意它非常接近,我可以说它是相等的,但是 I've read that the machine epsilon for the C++ double type is 2^-52
这比我得到的值大。
那么为什么我的值比机器 epsilon 低? 为什么该值不四舍五入为零?
这没什么大不了的,但是当我进行逻辑测试时,我的值似乎不为零...
最佳答案
这个故事中有两个不同的常量。一个是 epsilon,它是一个最小值,当添加到 1.0 时会产生不同于 1.0 的值。如果将较小的值添加到 1.0,您将再次得到 1.0,因为计算机中数字的表示存在物理限制。但是有些值小于 epsilon 且大于零。 double
的最小此类数字你得到 std::numeric_limits<double>::min
.
作为引用,您可以通过 std::numeric_limits<double>::epsilon
获得 epsilon .
关于c++ - 为什么我的 double 可以包含低于机器 epsilon 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43678480/