浮点数乘法:a * 1.0 == a 是否保证成立?

4

假设a是一个浮点数。那么a * 1.0 == a是否总是成立的?


1个回答

7
是的。唯一的例外是当aNaN时,根据定义,NaN * 1.0 = NaN,但NaN与自身不相等。但即使如此,在两边得到的结果也可以说是相同的。然而,如果你关心的话,NaN的有效负载可能是不同的,这可能会有所区别,特别是在系统区分静默NaN和信号NaN的情况下。
浮点数算术的一般规则是,结果应该按照无限精度计算,然后使用给定的舍入模式进行四舍五入(如果需要),以适应最终的格式。由于a是一个可表示的浮点数,将其乘以1.0的数学结果在被解释为无限精度数字时确切地给出了a。不需要舍入,因为a已经是可表示的。所以,除了讨论过的退化的NaN情况外,你可以保证a * 1.0 == a

在NaN的情况下,两边可能得到不同的结果。例如,考虑一个既有信号NaN又有静默NaN的系统。 - Patricia Shanahan
好观点!有效载荷可能确实有所不同;已相应地更新了答案。 - alias
你有任何参考资料吗? - xuhdev
这个简单地遵循函数式编程算术的一般规则:结果应该被计算为无限精度,然后向下舍入以适应最终格式。由于a是一个可表示的浮点数,将其乘以1.0的数学结果在无限精度的解释下恰好等于a。舍入操作将其还原回原来的值。所以,你可以确保a * 1.0 == a,除了讨论过的特殊情况NaN - alias
请您能否在答案中加上解释?我会接受它的。谢谢! - xuhdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接