정확수와 부정확수

리스펙스는 임의 정밀도 정확 정수, 기약 정확 유리수, 정규 위치 표기를 쓰는 유한 IEEE-754 실수를 제공합니다.

언제 필요한가요?

수학적 결과를 정확하게 유지해야 하면 정확 정수와 유리수를 사용하세요. 부정확한 측정이나 명시적으로 부정확한 연산이 문제에 들어올 때만 실수를 도입합니다.

실행으로 확인하기

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 초월함수는 제외됩니다.

현재 경계

  • 산술의 정확·부정확 전염 규칙을 선택·비교 의미론으로 일반화하면 안 됩니다.

다음으로

수치 프로시저에서 도메인과 시그니처를 찾고, 동등성에서 수치 동등성과 정확성 민감 비교를 구분하세요.

수치 프로시저 · 동등성과 동일성