R6RS Scheme: 구현 요구사항

R6RS Scheme: 구현 요구사항

Scheme 구현이 지켜야 하는 숫자 객체에 대한 요구사항을 설명해요. 정확한 숫자와 부정확한 숫자에 대한 구현 의무를 다뤄요.

출처: 문서

본문

Scheme 구현은 3.1절에서 주어진 하위 타입의 전체 탑에 대한 숫자 객체를 지원해야 해요. 나아가 구현은 실질적으로 무제한의 크기와 정밀도를 가진 정확한 정수 객체와 정확한 유리수 숫자 객체를 지원해야 하고, 특정 프로시저(11.7.1에 나열됨)를 구현해 정확한 인자가 주어졌을 때 항상 정확한 결과를 반환하도록 해야 해요. ("실질적으로 무제한"은 이 숫자들의 크기와 정밀도가 사용 가능한 메모리의 크기에 의해서만 제한되어야 한다는 뜻이에요.)

구현은 이 절의 요구사항에 따라 어떤 타입의 부정확한 숫자 객체에 대해서도 제한된 범위만 지원할 수 있어요. 예를 들어 구현은 부정확한 실수 숫자 객체(따라서 부정확한 정수와 유리수 숫자 객체)의 범위를 flonum 형식의 동적 범위로 제한할 수 있어요. 더욱이 그러한 구현에서는 이 범위의 한계에 가까워짐에 따라 부정확한 정수 객체와 유리수 사이의 간격이 매우 클 가능성이 높아요.

구현은 부정확한 숫자에 대해 부동소수점 및 기타 근사 표현 전략을 사용할 수 있어요. 이 리포트는 부동소수점 표현을 사용하는 구현이 IEEE 부동소수점 표준을 따르는 것을 권장하지만 요구하지 않고, 다른 표현을 사용하는 구현은 이러한 부동소수점 표준으로 달성 가능한 정밀도와 같거나 초과하는 정밀도를 맞춰야 한다고 권장해요 [13].

특히 부동소수점 표현을 사용하는 구현은 다음 규칙을 따라야 해요: 부동소수점 결과는 그 연산에 대한 부정확한 인자 중 어느 것을 표현하는 데 사용되든 적어도 그만큼의 정밀도로 표현되어야 해요. sqrt 같은 잠재적으로 부정확한 연산은 정확한 인자에 적용될 때 가능하면 정확한 답을 만들어야 해요 (예를 들어 정확한 4의 제곱근은 정확한 2여야 해요). 그러나 이것은 요구되지 않아요. 반면 정확한 숫자 객체가 (예를 들어 sqrt에 의해) 부정확한 결과를 만들도록 연산되고, 그 결과가 부동소수점으로 표현된다면, 사용 가능한 가장 정밀한 부동소수점 형식이 사용되어야 해요. 그러나 결과가 다른 방식으로 표현된다면 그 표현은 사용 가능한 가장 정밀한 부동소수점 형식만큼의 정밀도를 적어도 가져야 해요.

구현에서 표현될 수 없을 정도로 크기가 크거나 유효숫자가 큰 부정확한 숫자 객체를 사용하지 않는 것은 프로그래머의 책임이에요.

더 알아보기 (Learn more)

출처: Implementation requirements - R6RS