수치 프로시저

산술, 비교, 정수 나눗셈, 반올림, gcd/lcm, 거듭제곱, 정수 제곱근의 인자와 정확성과 오류를 확인합니다.

필요한 수치 프로시저를 고르고 인자 조건을 확인하세요. 예제로 결과 두 개를 모으는 방법과 음수의 정수 나눗셈을 살펴볼 수 있습니다.

정수 제곱근과 나머지 구하기

아래 예제 전체를 플레이그라운드에서 실행하세요.

LISPEX
(call-with-values (lambda () (exact-integer-sqrt 20)) list)

결과

출력
(4 4)

프로시저는 두 값을 돌려줍니다. 첫 값은 제곱했을 때 20 이하가 되는 가장 큰 정수입니다. 둘째 값은 나머지이므로 20 = 4 × 4 + 4가 됩니다. call-with-values로 두 값을 list에 넘기면 함께 볼 수 있습니다.

음수의 나눗셈 방식 고르기

LISPEX
(list (call-with-values (lambda () (floor/ -7 3)) list)
      (call-with-values (lambda () (truncate/ -7 3)) list))

결과

출력
((-3 2) (-2 -1))

두 프로시저 모두 몫과 나머지를 돌려줍니다. floor/는 몫을 아래로 내리므로 -3을 얻습니다. truncate/는 몫을 0 쪽으로 잘라 -2를 얻습니다. 어느 쪽이든 나누는 수에 몫을 곱하고 나머지를 더하면 원래 수가 됩니다.

인자와 결과 확인하기

표의 ...는 같은 종류의 인자를 더 넣을 수 있다는 뜻입니다.

호출인자와 결과오류
(+ number ...), (* number ...)수를 0개 이상 받음. (+)는 0, (*)는 1을 반환E312 잘못된 타입, E314 유한하지 않은 결과
(- number ...), (/ number ...)수를 1개 이상 받음. (- 5)는 -5, (/ 4)는 1/4을 반환E302 인자 없음, E312 잘못된 타입, E313 0으로 나눔, E314 유한하지 않은 결과
(= number number ...)와 < > <= >=수를 2개 이상 받음. 정확수와 부정확수를 섞어도 정확하게 비교E302 인자 부족, E312 잘못된 타입
(floor/ integer integer), (truncate/ integer integer)정수 2개를 받아 몫과 나머지를 두 값으로 반환E312 정수가 아님, E313 0으로 나눔, E314 부정확수 결과가 너무 큼
(expt number exact-integer)밑과 정확 정수 지수를 받음. 결과는 밑의 정확성을 유지E312 잘못된 타입, E313 정확수 0의 음수 거듭제곱, E314 결과 표현 불가
(exact-integer-sqrt exact-nonnegative-integer)0 이상의 정확 정수 1개를 받음. 정확 정수 제곱근과 나머지를 반환E312 입력이 0 이상의 정확 정수가 아님

+, -, *, /는 입력이 모두 정확수이면 정확수를 돌려줍니다. 나눗셈 결과는 (/ 10 5) → 2처럼 정수일 수도 있고 분수일 수도 있습니다. 입력 중 하나라도 부정확수이면 결과도 부정확수입니다.

정수 나눗셈은 7.0처럼 값이 정수인 입력을 받지만 7/2는 거부합니다. 입력 중 하나라도 부정확수이면 결과도 부정확수입니다. 반면 expt의 지수는 정확 정수여야 하므로 (expt 2 3.0)은 E312 오류를 냅니다.

그 밖의 수 연산

수를 반올림하거나 잘라내려면 floor, ceiling, round, truncate를 쓰세요. 이 프로시저들은 정확성을 유지하며, round는 중간값을 가장 가까운 짝수 정수로 반올림합니다. gcd와 lcm은 최대공약수와 최소공배수를 구합니다.

리스펙스는 유한한 실수를 다룹니다. 계산 결과가 무한대 또는 NaN이 되면 E314 오류가 납니다. sin, log 같은 일반 초월함수는 지원하지 않습니다.

관련 문서

정확한 수와 근삿값에서 수를 섞어 계산하는 규칙과 출력 표기를 확인하세요. 다른 프로시저는 프로시저 색인에서 찾을 수 있습니다.