haskell - 负零的绝对值 - bug,还是浮点标准的一部分?

标签 haskell floating-point

我知道有符号零用于区分下溢与正数或负数,因此值得区分它们。直觉上我觉得-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/

相关文章:

Haskell 类型签名

haskell - 在 Haskell 中使用 Pipes 读写二进制数据

floating-point - 42 可以精确表示为 float 吗?

ruby - 在 Ruby 中将唯一的种子字符串转换为随机但确定的浮点值

Java 与 C float : "x * x" differs from "pow(x,2)"?

matlab - 了解如何计算 FLOP 次数

algorithm - Haskell - C 堆栈溢出

xml - 一次添加一个元素的箭头

Haskell:为自定义类型派生 Show