Haskell에서 Int
와 Integer
? 의 차이점은 무엇 입니까? 답은 어디에 기록되어 있습니까?
답변
“정수 (Integer)”는 임의의 정밀도 유형입니다. 기계 메모리의 한계까지 아무리 클지라도 아무 숫자 나 보유 할 수 있습니다…. 이것은 산술 오버플로가 없다는 것을 의미합니다. 반면에 그것은 산술이 상대적으로 느리다는 것을 의미합니다. Lisp 사용자는 여기서 “bignum”유형을 인식 할 수 있습니다.
“Int”는보다 일반적인 32 또는 64 비트 정수입니다. 구현은 다양하지만 최소 30 비트로 보장됩니다.
출처 : 하스켈 Wikibook . 또한 Haskell 에 대한 부드러운 소개 의 숫자 섹션이 유용 할 수 있습니다.
답변
Int
는 구현에 따라 다르지만 최소한 [-2 29 .. 2 29 -1] 을 유지하도록 보장되는 한계를 Bounded
사용 minBound
하고 maxBound
찾을 수 있음을 의미합니다 .
예를 들면 다음과 같습니다.
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
그러나 Integer
임의의 정밀도이며 그렇지 않습니다 Bounded
.
Prelude> (minBound, maxBound) :: (Integer, Integer)
<interactive>:3:2:
No instance for (Bounded Integer) arising from a use of `minBound'
Possible fix: add an instance declaration for (Bounded Integer)
In the expression: minBound
In the expression: (minBound, maxBound) :: (Integer, Integer)
In an equation for `it':
it = (minBound, maxBound) :: (Integer, Integer)
답변
지능은 보장 범위 이상 -2에서와 기계 정수의 유형이며, 29 2에 29 동안, 한 – 정수 당신이 메모리가 큰 등의 범위, 임의 정밀도의 정수입니다.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
답변
Int는 C int이며, 값의 범위는 -2147483647에서 2147483647까지이며 전체 Z 세트 의 정수 범위는 임의로 클 수 있습니다.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Int 리터럴의 값을 확인하십시오.
답변
Prelude는 가장 기본적인 숫자 유형 인 고정 크기 정수 (Int), 임의의 정밀 정수 (정수) 만 정의합니다.
…
유한 정밀도 정수 타입 Int는 최소한 [-2 ^ 29, 2 ^ 29-1] 범위를 포함합니다.
하스켈 보고서 : http://www.haskell.org/onlinereport/basic.html#numbers