삼분의 일 같은 결과를 분수로 유지하려면 정확수를 쓰세요. 측정값을 다루거나 반올림을 허용하는 계산에는 부정확수를 쓸 수 있습니다.
결과 비교하기
아래 예제 전체를 플레이그라운드에서 실행하세요.
(list (/ 1 3) (+ 1 2.0) (number->string -0.0))결과
(1/3 3.0 "-0.0")(/ 1 3)은 정확한 분수 1/3을 돌려줍니다. 정확수 1에 부정확수 2.0을 더하면 부정확수 3.0이 나옵니다. 수를 문자열로 바꾸는 number->string은 -0.0의 음수 부호도 유지합니다.
수의 종류 고르기
| 종류 | 예 | 저장 방식 |
|---|---|---|
| 정확 정수 | 0, -12, 999999999999 | 임의 정밀도를 사용하므로 고정된 기계 정수 크기를 넘어설 수 있음 |
| 정확 유리수 | 1/3, -5/2 | 더 약분할 수 없는 분수로 저장하며 분모는 양수 |
| 부정확 실수 | 2.0, -0.0, 0.125 | 유한한 64비트 IEEE-754 부동소수점 수 |
약분한 분모가 1이면 정확 정수가 됩니다. 예를 들어 (/ 10 5)는 2를 돌려줍니다.
+, -, *, /는 입력이 모두 정확수이면 정확수를 돌려줍니다. 입력 중 하나라도 부정확수이면 모든 입력을 부동소수점 수로 바꿔 계산합니다.
정확수를 반올림하지 않고 비교하기
(list (= 2 2.0) (= 1/10 0.1) (min 1 2.0))결과
(#t #f 1.0)2와 2.0의 수학적 값은 같습니다. 부정확수 0.1은 십분의 일을 이진수로 근사해 저장하므로 정확수 1/10과 다릅니다.
수 비교 프로시저 =, <, >, <=, >=는 저장된 값을 정확하게 비교합니다. 비교 전에 정확수를 부동소수점 수로 반올림하지 않습니다.
min과 max도 정확하게 비교한 뒤 값을 고릅니다. 입력 중 하나라도 부정확수이면 고른 값을 부정확수로 돌려줍니다. 따라서 (min 1 2.0)의 결과는 1.0입니다.
실수 출력 읽기
실수는 지수 표기 없이 소수로 출력됩니다. 같은 부동소수점 값으로 다시 읽을 수 있는 가장 적은 자릿수를 씁니다.
| 입력 | 결과 |
|---|---|
(number->string 0.125) | "0.125" |
(number->string 1e3) | "1000.0" |
(number->string -0.0) | "-0.0" |
소수 부분이 없는 실수에는 .0이 붙습니다. 음의 0은 부호를 유지합니다.
수 오류 확인하기
0으로 나누면 E313 오류가 납니다. 계산이나 변환 결과가 무한대 또는 NaN이 되면 E314 오류가 납니다.
위 수 타입으로 정수와 분수와 유한 실수를 다룰 수 있습니다. 복소수와 sin, log 같은 함수는 지원하지 않습니다. 정수 거듭제곱과 정수 제곱근에는 expt와 exact-integer-sqrt를 쓰세요.
관련 문서
수치 프로시저에서 인자와 오류를 확인하세요. 동등성과 동일성은 비교할 때 정확수와 부정확수를 구별하는 경우를 설명합니다.