【发布时间】:2016-10-07 03:06:39
【问题描述】:
在 C 中,是否可以保证两个值相等的双精度 (double1 == double2) 具有相同的位模式?
【问题讨论】:
-
这不是语言的问题,而是 pc 架构本身的问题。如果你喜欢它,你可以阅读数值分析,无论如何只要记住,在比较浮点数时,你应该检查它们的差异是否可以忽略不计的值。该值应该对您的应用程序有意义,即虽然比较 |a - b| 确实有意义
-
注意:即使
double值:+0.0 和-0.0 相同,某些操作会给出不同的结果:What operations and functions on +0.0 and -0.0 give different arithmetic valued results? -
我闻到了 XY 问题。 为什么你要依赖它?
-
我正在创建一个类似 JVM 的小型字节码解释器,在其中我使用 NaN 标记将双精度值和指向对象的指针存储在 uint64_t 中。显然,相等的位模式可以保证数字和对象的平等,但是如果数字的位模式可以不同而值保持不变,那么我显然不能只依赖位模式。
-
只记得 NaN 无论如何都不会相等。
标签: c floating-point bit-manipulation