我正在使用双精度求解方程,我得到-7.07649e-17
作为解决方案而不是0
.
我同意它足够接近,我可以说它是相等的,但是我读到 C++ 双精度类型的机器 epsilon 是2^-52这比我得到的值要大。
那么为什么我的值比机器 epsilon 低呢?
为什么该值不四舍五入为零?
这没什么大不了的,但是当我进行逻辑测试时,我的值似乎不为零......
这个故事中有两个不同的常数。其中之一是 epsilon,它是一个最小值,与 1.0 相加时会产生与 1.0 不同的值。如果在 1.0 上添加一个较小的值,您将再次得到 1.0,因为计算机中数字的表示存在物理限制。但有些值小于 epsilon 且大于零。最小的这样的数字double
你得到std::numeric_limits<double>::min
.
作为参考,您可以得到 epsilonstd::numeric_limits<double>::epsilon
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)