我知道有符号零用于区分下溢与正数或负数,因此值得区分它们。直觉上我觉得-0.0
的绝对值应该是0.0
。然而,这并不是 Haskell 所说的:
Prelude> abs (-0.0)
-0.0
就其值(value)而言,Python 2.7 不同意:
>>> -0.0
-0.0
>>> abs(-0.0)
0.0
这是一个错误,还是标准的一部分?
最佳答案
您描述的行为绝对不符合 IEEE 754 标准,该标准在其最新版本中表示:
abs(x) copies a floating-point operand x to a destination in the same format, setting the sign bit to 0 (positive).
这是 IEEE 754-2008 的第 5.5.1 节,标题为“符号位运算”。虽然我无法提供标准本身的链接,但您可以在最后一个可用的 public draft 中看到大致相同的语言。标准的第 7.5.1 节。 (一般来说,该标准与该草案有很大不同,但这一点几乎没有变化。)
这并不意味着它是 Haskell 中的一个错误,除非 Haskell 特别声明遵循 IEEE 754 标准,并且还声明 Prelude 中 abs
的实现应该映射到 IEEE 754 abs
函数。该标准仅要求必须提供 abs
操作,但没有说明它的拼写方式。
关于haskell - 负零的绝对值 - bug,还是浮点标准的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395761/