【问题标题】:Floating-point number multiplication: a * 1.0 == a guaranteed?浮点数乘法:a * 1.0 == a 保证?
【发布时间】:2020-03-15 09:27:16
【问题描述】:

a 是一个浮点数。 a * 1.0 == a 是否始终有保证?

【问题讨论】:

标签: floating-point ieee-754


【解决方案1】:

是的。唯一的例外是当aNaN 时,NaN * 1.0 = NaN 根据定义,但NaN 与自身比较不相等。但即便如此,你也可以争辩说双方的结果都是一样的。但是,NaN 有效负载可能会有所不同,如果您关心的话。

它简单地遵循 FP 算术的一般规则:结果应该被计算为具有无限精度,然后向下舍入以适应最终格式。由于 a 是一个可表示的浮点数,因此将它乘以 1.0 的数学结果正好可以将 a 解释为一个无限精确的数字。四舍五入将其带回自身。因此,您可以保证 a * 1.0 == a,但所讨论的 degenerateNaN 情况除外。

【讨论】:

  • 在NaN的情况下,两边的结果可能不一样。例如,考虑一个同时具有信号和静默 NaN 的系统。
  • 好点!有效载荷可能确实不同;相应地更新了答案。
  • 你有什么参考吗?
  • 它简单地遵循 FP 算术的一般规则:结果应该像无限精度一样计算,然后向下舍入以适合最终格式。由于a 是一个可表示的浮点数,因此将其乘以1.0 的数学结果精确地给出了a,当它被解释为一个无限精确的数字时。四舍五入将其带回自身。所以,除了讨论的 degenerateNaN 情况外,您可以保证 a * 1.0 == a
  • 您能在答案中添加解释吗?我会接受的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多