【问题标题】:DBL_MAX integer part equalityDBL_MAX 整数部分相等
【发布时间】:2013-10-26 01:48:49
【问题描述】:

在 Visual C++ 2010 中,我尝试过这个

double d= DBL_MAX;
double dblmaxintpart;
modf(DBL_MAX, &dblmaxintpart);

在调试器窗口中我放了

d == dblmaxintpart

结果为 true

我可以假设 DBL_MAX 等于它的整数部分作为始终有效的断言吗?

【问题讨论】:

    标签: c++ visual-c++ integer double max


    【解决方案1】:

    是的,代表整数的double 的整数部分始终是double 本身,即使在DBL_MAX 也是如此。事实上,任何大于 2^52 的double 都会将自身作为整数部分,因为该大小的双精度数没有足够的尾数位来表示分数。

    出于类似的原因,并非所有大于 2^53 的整数都可以表示为 doubles(尽管当转换为 doubles 时,它们仍然是整数)。

    最后,任何小于 1 的double 的小数部分将完全是其自身,而任何double 的小数部分和整数部分在相加时将完全生成原始double

    【讨论】:

    • 您的回答有误:double 应该存储数字的小数部分。 “代表整数的双精度数的整数部分始终是双精度数”怎么可能?它甚至与你的第二段不连贯。 2 ^ 52 ...嗯?这不取决于平台/架构吗?
    • @sergiol 我不确定你在说什么。 doubles 是二进制表示,而不是十进制表示。至于 2^52,它不依赖于平台或架构,而是受 IEEE-754 标准的约束。
    • 一些基本规则: 0 到 2^53 之间的所有整数都可以精确地表示为双精度数;并非所有大于 2^53 的整数都可以,即使它们小于 DBL_MAX。所有大于 2^52 的双精度数都是整数。
    • @sergiol 了解 IEEE-754 双精度数据类型是数字的二进制表示,而不是十进制表示,这一点非常重要。
    • @Ben:IEEE-754 双精度浮点数确实如此。 C++ 标准不保证这一点。编译器可能具有double 数据类型,其精度高于 IEEE-754 要求,只要它们以适当的方式定义一致性宏。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2019-05-06
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多