`ABS` — 절댓값 함수
ABS — 절댓값 함수
어떤 숫자의 크기만 필요하고 부호는 신경 쓰고 싶지 않을 때가 있어요. 그때 쓰는 함수가 abs예요. 겉보기엔 단순하지만 복소수까지 처리할 때는 타입이 어떻게 나오는지를 알아둬야 헷갈리지 않아요.
본문
시그니처
abs number => absolute-value
인자와 반환값
number— 숫자.absolute-value— 음이 아닌 실수(non-negative real).
설명
abs는 number의 절댓값을 반환해요.
number가 실수(real) 면, 결과는number와 같은 타입이에요.number가 복소수(complex) 면, 결과는number와 같은 크기(magnitude) 를 가진 양의 실수예요. 이때number의 성분이 유리수(rational)라서 정확한 유리수 결과가 가능한 경우에도 결과가 부동소수점(float) 이 될 수 있어요. 그래서(abs #c(3 4))의 결과는 구현에 따라5일 수도5.0일 수도 있어요.
예제
(abs 0) => 0
(abs 12/13) => 12/13
(abs -1.09) => 1.09
(abs #c(5.0 -5.0)) => 7.071068
(abs #c(5 5)) => 7.071068
(abs #c(3/5 4/5)) => 1 or approximately 1.0
(eql (abs -0.0) -0.0) => true
복소수 예제를 보면 결과가 항상 실수로 나오는 걸 확인할 수 있어요.
예외 상황
없음.
주의
number가 복소수면 결과는 다음 식과 동등해요.
(sqrt (+ (expt (realpart number) 2) (expt (imagpart number) 2)))
다만 구현은 모든 복소수에 이 공식을 그대로 쓰지 말고, 아주 크거나 아주 작은 성분의 경우 중간 연산에서 오버플로나 언더플로가 나지 않도록 특별히 처리해야 해요.
함께 보기
- Section 12.1.3.3 (Rule of Float Substitutability)