Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Math Haskell中整数的上界是多少?_Math_Haskell - Fatal编程技术网

Math Haskell中整数的上界是多少?

Math Haskell中整数的上界是多少?,math,haskell,Math,Haskell,我在解一道数学题:想得到数字2^1000的数字之和 在Java中,解决方案如下所示: String temp = BigInteger.ONE.shiftLeft(1000).toString(); int sum = 0; for (int i = 0; i < temp.length(); i++) sum += temp.charAt(i) - '0'; 整个过程非常顺利,有一点似乎很有趣,我们知道integer类型不能处理2^1000,太大了,在Java中,很明显使用B

我在解一道数学题:想得到数字2^1000的数字之和

在Java中,解决方案如下所示:

String temp = BigInteger.ONE.shiftLeft(1000).toString();

int sum = 0;
for (int i = 0; i < temp.length(); i++)
    sum += temp.charAt(i) - '0';
整个过程非常顺利,有一点似乎很有趣,我们知道integer类型不能处理2^1000,太大了,在Java中,很明显使用BigInteger并将大的数字处理为字符串,但在Haskell中,没有编译错误意味着2^1000可以直接传入。问题是,Haskell是否在内部将数字转换为字符串?我想确定类型并让编译器确定,然后在GHCi中键入以下行:

在这里,我完全困惑了,显然,I的数量过大了,但是I的返回类型仍然是整数。我们如何解释这一点,以及Haskell整数的上限是什么?

在Haskell中,整数是一种理论上无界的整数类型。固定宽度类型有Int、Int8、Int16、Int32、Int64以及相应的无符号字、Word8等

实际上,即使是整数也有界,例如可用内存或内部表示

默认情况下,GHC使用GMP包来表示整数,这意味着边界是2^2^37左右,因为GMP使用32位整数来存储肢体的数量。

在Haskell中,整数是一种理论上无限的整数类型。固定宽度类型有Int、Int8、Int16、Int32、Int64以及相应的无符号字、Word8等

实际上,即使是整数也有界,例如可用内存或内部表示

默认情况下,GHC使用GMP包表示整数,这意味着边界为2^2^37左右,因为GMP使用32位整数存储肢体的数量。

dup:dup:
digitSum ::(Integral a) => a -> a                  
digitSum 0 = 0
digitSum n = (mod n 10) + (digitSum (div n 10))
Prelude> let i = 2 ^ 1000

Prelude> i 
107150860718626732094842504906000181056140481170553360744375038837035105112493612249319
837881569585812759467291755314682518714528569231404359845775746985748039345677748242309
854210746050623711418779541821530464749835819412673987675591655439460770629145711964776
86542167660429831652624386837205668069376

Prelude> :t i
i :: Integer