numeric_limits中有错误吗?或者我只是感到困惑

Is there a bug in numeric_limits or am I just confused?

本文关键字:或者 limits 有错误 numeric      更新时间:2023-10-16

我在调试一些代码时遇到了一些奇怪的行为,至少在我自己看来是这样,这些代码涉及到确定加法操作是否会下溢double。下面是一个示例程序,演示我的发现。

#include <iostream>
#include <limits>
using std::cout;
using std::endl;
using std::numeric_limits;
int main()
{
    double lowest = numeric_limits<double>::lowest();
    bool truth = (lowest + 10000) == lowest;
    cout << truth << endl;
}

当我执行这个代码时,结果是真的。这是虫子还是我睡眠不足?

最小的双精度是:

-1.7976931348623157e+308

只有当双打的精度达到300位数以上时,再加上10000或1e4才会产生明显的效果,而他们肯定不会这样做。双打只能容纳15-17位有效数字。

这两个数字的大小相差如此之大,加上10000并不能产生一个新的数字。事实上,最小二重是一个巨大的数字(可以这么说),你可以在它上面加一个googol——那是1后面跟着一百个零——它不会改变。

相关文章: