[haskell] Int와 Integer의 차이점은 무엇입니까?

Haskell에서 IntInteger? 의 차이점은 무엇 입니까? 답은 어디에 기록되어 있습니까?



답변

“정수 (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


답변

Integerint로서 구현 Int#그것이 최대 값보다 클 때까지 Int#저장할 수있다. 이때는 GMP 번호입니다.


답변