언제 필요한가요?
수학적 결과를 정확하게 유지해야 하면 정확 정수와 유리수를 사용하세요. 부정확한 측정이나 명시적으로 부정확한 연산이 문제에 들어올 때만 실수를 도입합니다.
실행으로 확인하기
LISPEX
(list (/ 1 3) (+ 1 2.0) (number->string -0.0))관측 결과
OUTPUT
(1/3 3.0 "-0.0")예제 읽기
1/3은 기약 정확 유리수로 남습니다. 정확수 1과 부정확수 2.0을 더하면 부정확한 3.0이 됩니다. 출력은 음의 0 부호를 보존하므로 number->string은 "-0.0"을 돌려줍니다.
이 순서로 생각하세요
- 정확 산술은 정확성을 유지하고
+ - * /는 부정확 피연산자가 하나라도 있으면 부정확해집니다. 비교는 혼합 수를 정확히 비교합니다. - 무한대와 NaN은 런타임에 들어올 수 없으며 0 나눗셈은 E313, 비유한 결과 생성은 E314입니다.
- 유한 실수 출력은 왕복 가능한 최단 위치 표기만 쓰고
.0을 강제하며-0.0을 보존합니다.
빠르게 고르기
| 종류 | 예 | 핵심 규칙 |
|---|---|---|
| 정확 정수 | 0, -12, 999999999999 | 임의 정밀도 |
| 정확 유리수 | 1/3, -5/2 | 양수 분모의 기약형으로 저장 |
| 유한 실수 | 2.0, -0.0, 0.125 | 유한 IEEE-754와 정규 위치 출력 |
| 혼합 산술 | (+ 1 2.0) | 부정확 피연산자 하나가 산술 결과를 부정확하게 함 |
| 혼합 비교 | (= 2 2.0) | 손실 있는 변환 없이 수학적으로 비교 |
흔한 오해
복소수와 플랫폼 libm 초월함수는 제외됩니다.
현재 경계
- 산술의 정확·부정확 전염 규칙을 선택·비교 의미론으로 일반화하면 안 됩니다.
다음으로
수치 프로시저에서 도메인과 시그니처를 찾고, 동등성에서 수치 동등성과 정확성 민감 비교를 구분하세요.