Abs和minBound

时间:2019-02-07 21:21:54

标签: haskell math

在各种情况下使用minBound时,我尝试了

> minBound :: Int
=> -9223372036854775808

这似乎是合理的。

但是

> abs minBound :: Int 
=> -9223372036854775808

这怎么可能? abs x >= 0不应该假设x :: Int吗?

这里缺少我对语义的某种理解吗?

1 个答案:

答案 0 :(得分:5)

Prelude> minBound :: Int
-9223372036854775808
Prelude> maxBound :: Int
9223372036854775807

请注意,数字9223372036854775808不能表示为整数。这是two's complement表示形式可能在此处的背景中使用的结果。 minBound的绝对值不能表示为Int类型的成员,因此最终会得到一个溢出值。