【问题标题】:Is there a bug in numeric_limits or am I just confused?numeric_limits 中是否存在错误或者我只是感到困惑?
【发布时间】:2014-11-04 22:29:39
【问题描述】:

我遇到了一些奇怪的行为,至少在我自己的想法中,在调试一些涉及确定加法运算是否会下溢双精度的代码时。这是一个演示我发现的示例程序。

#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;
}

当我执行这段代码时,我得到了真实的结果。这是一个错误还是我只是睡眠不足?

【问题讨论】:

    标签: c++ double numeric-limits


    【解决方案1】:

    最小的double是:

    -1.7976931348623157e+308
    

    只有在 double 具有 300+ 位精度的情况下,添加 10,000 或 1e4 才会产生明显的效果,而它们绝对不会。双打只能包含 15-17 位有效数字。

    这两个数字之间的大小差异如此之大,以至于相加 10,000 不会产生一个新数字。事实上,最小的 double 是一个 巨大的数字(可以这么说),您可以在其中添加一个 googol——即 1 后跟一百个零——它会不要改变。

    【讨论】:

    • @MatthewPapageorge 也看看:Double-precision floating-point format
    • 感谢约翰迅速而明确的答复。对此,我真的非常感激。也感谢 Basile 和 Rimas 提供的阅读材料。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多