c++ - 为什么我的 double 可以包含低于机器 epsilon 的值?

标签 c++ precision epsilon

我正在使用 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/

相关文章:

在运行时定义的 C++ 全局 extern 常量可跨多个源文件使用

c++ - 数组 C++ 的 PushFront 方法

c++ - 在我的递归函数中跟踪计数 (Collat​​z)

带有等待窗口的 C++ 线程终止

c++ - double : Multiplication of big numbers

c# - Double.Epsilon 表示相等、大于、小于、小于或等于、大于或等于

c++ - 有限差分法中使用的最佳 epsilon/dx 值是多少?

c++ - C++ 中的 log base 2 精度错误

math - float 学有问题吗?