【发布时间】:2020-03-15 09:27:16
【问题描述】:
说a 是一个浮点数。 a * 1.0 == a 是否始终有保证?
【问题讨论】:
说a 是一个浮点数。 a * 1.0 == a 是否始终有保证?
【问题讨论】:
是的。唯一的例外是当a 是NaN 时,NaN * 1.0 = NaN 根据定义,但NaN 与自身比较不相等。但即便如此,你也可以争辩说双方的结果都是一样的。但是,NaN 有效负载可能会有所不同,如果您关心的话。
它简单地遵循 FP 算术的一般规则:结果应该被计算为具有无限精度,然后向下舍入以适应最终格式。由于 a 是一个可表示的浮点数,因此将它乘以 1.0 的数学结果正好可以将 a 解释为一个无限精确的数字。四舍五入将其带回自身。因此,您可以保证 a * 1.0 == a,但所讨论的 degenerateNaN 情况除外。
【讨论】:
a 是一个可表示的浮点数,因此将其乘以1.0 的数学结果精确地给出了a,当它被解释为一个无限精确的数字时。四舍五入将其带回自身。所以,除了讨论的 degenerateNaN 情况外,您可以保证 a * 1.0 == a。