programing tip

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

itbloger 2020. 6. 4. 19:13
반응형

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 번호입니다.


정수는 오버플로의 결과로 정의되지 않은 동작에 의해 제한되지 않기 때문에보다 적극적인 최적화를 허용합니다.

즉, 컴파일러는 작성된 표현이 정의되지 않은 동작을 경험하지 않을 것이라고 가정해야하며, 컴파일러가 도입 한 잠재적 인 최적화도 새로운 정의되지 않은 동작을 도입하지 않을 것이라고 가정해야합니다.

또는 다른 방법

표현식 a - (b - c)은 대수적으로 동일 (a + c) - b하지만 컴파일러는 a + c원래 값으로 오버플로를 일으키지 않는 입력으로 중간 값 이 오버플로 될 가능성이 있기 때문에 재 배열을 수행 할 수 없습니다 .

참고 URL : https://stackoverflow.com/questions/3429291/what-is-the-difference-between-int-and-integer

반응형