Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么大数运算在某一点返回负数,并使用';ints&x27;在哈斯克尔?_Haskell_Numbers_Int - Fatal编程技术网

Haskell 为什么大数运算在某一点返回负数,并使用';ints&x27;在哈斯克尔?

Haskell 为什么大数运算在某一点返回负数,并使用';ints&x27;在哈斯克尔?,haskell,numbers,int,Haskell,Numbers,Int,具有以下功能: factorial::Int->Int factorial n=product[1..n] 返回参数小于21的正确值。例如: factorial20返回2432902008176640000,但factorial21返回-4249290049419214848,即使值不是负值,也不正确 我知道,对于这些大小的数字,Integer应该被使用,但是这里发生的错误具体在哪里,原因是什么?Int在Haskell中,整数是一个有限范围内的固定精度表示。与大多数固定精度整数表示法的情况一样,

具有以下功能:
factorial::Int->Int

factorial n=product[1..n]

返回参数小于21的正确值。例如:
factorial20
返回2432902008176640000,但
factorial21
返回-4249290049419214848,即使值不是负值,也不正确


我知道,对于这些大小的数字,
Integer
应该被使用,但是这里发生的错误具体在哪里,原因是什么?

Int
在Haskell中,整数是一个有限范围内的固定精度表示。与大多数固定精度整数表示法的情况一样,如果一个算术运算会创建一个太大或太小而无法表示的整数(正如Mephy所提到的,称为整数溢出),那么它的结果将被截断为最低有效位。例如:

λ> maxBound + 1 :: Int
-9223372036854775808

λ> (maxBound + 1 :: Int) == minBound
True

Haskell中的
Int
是具有有限范围的整数的固定精度表示。与大多数固定精度整数表示法的情况一样,如果一个算术运算会创建一个太大或太小而无法表示的整数(正如Mephy所提到的,称为整数溢出),那么它的结果将被截断为最低有效位。例如:

λ> maxBound + 1 :: Int
-9223372036854775808

λ> (maxBound + 1 :: Int) == minBound
True
..