The IntInf 구조

The IntInf 구조

선택적인 IntInf 구조는 INTEGER 인터페이스의 가능한 구현 중 하나예요. INTEGER 연산 외에도 임의로 큰 정수로 프로그래밍하는 데 유용한 연산을 제공해요. IntInf.int 타입의 값을 돌려주는 IntInf 연산은 결코 Overflow 예외를 발생시켜서는 안 돼요. INTEGER 인터페이스를 확장하므로 IntInf는 타입 int를 정의한다는 점에 주의해요. 아래에서 구조로 수식되지 않은 이 타입 사용은 IntInf에 정의된 로컬 타입 int를 가리켜요.

출처: 문서

본문

시놉시스 (Synopsis)

signature INT_INF (* OPTIONAL *)
structure IntInf :> INT_INF (* OPTIONAL *)

인터페이스 (Interface)

include INTEGER
val divMod : int * int -> int * int
val quotRem : int * int -> int * int
val pow : int * Int.int -> int
val log2 : int -> Int.int
val orb : int * int -> int
val xorb : int * int -> int
val andb : int * int -> int
val notb : int -> int
val << : int * Word.word -> int
val ~>> : int * Word.word -> int

설명 (Description)

divMod (i, j)

(i div j, i mod j)를 돌려주되, 두 성분을 따로 계산하는 것보다 효율적일 가능성이 커요. j = 0이면 Div를 발생시켜요.

quotRem (i, j)

(i quot j, i rem j)를 돌려주되, 두 성분을 따로 계산하는 것보다 효율적일 가능성이 커요. j = 0이면 Div를 발생시켜요.

pow (i, j)

i를 j제곱한 결과를 돌려줘요. j > 0일 때 잘 정의돼요. j = 0이면 pow(i, j)는 1이고, 특히 pow(0, 0)은 1이에요. j < 0이면 i가 0일 때 Div가, |i| = 1일 때 i(j)가, |i| > 1일 때 0이 발생하는 특별한 경우를 정의해요.

log2 i

인자의 잘린 밑 2 로그, 즉 pow(2, k) <= i를 만족하는 가장 큰 정수 k를 돌려줘요. i <= 0이면 Domain을, 결과를 Int.int로 표현할 수 없으면 Overflow를 발생시켜요.

val orb : int * int -> int
val xorb : int * int -> int
val andb : int * int -> int

이 함수들은 각각 인자의 비트별 OR, 비트별 배타적 OR, 비트별 AND를 돌려줘요.

notb i

i의 비트별 보수(NOT)를 돌려줘요. ~(i + 1)과 동등해요.

<< (i, n)

i를 n비트 위치만큼 왼쪽으로 이동하고 오른쪽에서 0을 채워요. i와 n을 정수로 해석할 때(후자는 비음수) (i * 2(n))을 돌려줘요.

~>> (i, n)

i를 n비트 위치만큼 오른쪽으로 이동해요. i와 n을 정수로 해석할 때(후자는 비음수) floor((i / 2(n)))을 돌려줘요.

더 알아보기 (Learn more)