시스템 클래스 FLOAT — 부동소수점(float)
시스템 클래스 FLOAT — 부동소수점(float)
소수를 다룰 때 우리가 쓰는 부동소수점 수가 FLOAT 타입입니다. 이 페이지는 float가 수학적으로 어떻게 정의되는지, 그리고 타입 지정자로는 어떻게 쓰는지 정리한 내용이에요.
클래스 우선순위 목록
float, real, number, t
본문 (Description)
float 는 수학적 유리수(Common Lisp의 rational이 아니라)로서 다음 형태로 표현됩니다.
s * f * b^(e - p)
각 기호는 다음을 의미해요.
s— 부호(sign),+1또는-1b— 밑(base/radix), 1보다 큰 정수p— 정밀도(precision), float의 밑-b자릿수로 나타낸 양의 정수f— 가수(significand),b^(p-1)와b^p - 1사이(포함)의 양의 정수e— 지수(exponent), 정수
p의 값과 e의 범위는 구현과, 그 구현 안에서의 float 종류에 따라 달라집니다.
여기에 부동소수점 0(floating-point zero) 이 있고, 구현에 따라서는 마이너스 0(minus zero) 도 존재할 수 있어요.
- 마이너스 0이 없다면
0.0과-0.0은 모두 그냥 부동소수점 0으로 해석됩니다. 이 경우(= 0.0 -0.0)은 항상 참이에요. - 마이너스 0이 있다면
(eql -0.0 0.0)은 거짓이 되고, 없다면 참이 돼요.
FLOAT의 하위 타입
short-float, single-float, double-float, long-float 네 타입은 float의 하위 타입입니다. 이 중 어떤 두 타입은 서로 분리된 타입(disjoint) 이거나 같은 타입이어야 해요. 그리고 만약 같은 타입이라면, 위 순서에서 그 사이에 있는 다른 타입들도 반드시 같은 타입이어야 합니다.
예를 들어 single-float과 long-float이 같은 타입이면, double-float도 반드시 같은 타입이어야 해요.
복합 타입 지정자 (Compound Type Specifier)
- Kind: Abbreviating
- 구문:
float [lower-limit [upper-limit]]
-
인자:
lower-limit,upper-limit—float타입에 대한 구간 지정자(interval designator). 각각의 기본값은 기호*.
float 타입 지정자는 abbreviating 종류로, lower-limit과 upper-limit이 기술하는 구간 위의 float들을 나타냅니다.
Notes
흥미로운 점은 모든 수학적 정수가 Common Lisp에서 real로만 표현되는 게 아니라 복소수 float로도 표현될 수 있다는 거예요. 예를 들어 수학적 수 1은 다음과 같이 여러 방식으로 표현될 수 있습니다.
- 정수
1 - float
1.0 - 복소수
#C(1.0 0.0)