首页 > 解决方案 > Abs 和 minBound

问题描述

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

> minBound :: Int
=> -9223372036854775808

这似乎是合理的。

然而,

> abs minBound :: Int 
=> -9223372036854775808

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

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

标签: haskellmath

解决方案


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

请注意,该数字9223372036854775808不能表示为整数。这是此处可能在背景中使用的二进制补码表示的结果。的绝对值minBound不能表示为 type 的成员Int,因此您最终会得到一个溢出的值。


推荐阅读