파이썬에서 abs()와 math.fabs()는 모두 숫자의 절댓값(absolute value)을 구하는 수학 함수입니다. 두 함수는 비슷해 보이지만, 반환되는 값의 자료형과 처리 가능한 입력 범위에서 미묘하지만 중요한 차이가 있습니다. 아래 예제를 통해 이 차이를 자세히 살펴보겠습니다.
abs()와 fabs()의 주요 차이점
abs() 함수는 내장 함수로, 입력값에 따라 절댓값을 정수(int) 또는 부동소수점(float)으로 반환합니다. 즉, 정수를 넣으면 정수가, 실수를 넣으면 실수가 그대로 반환됩니다.
반면 math.fabs() 함수는 인자로 정수를 전달하더라도 항상 부동소수점(float) 형태로 값을 반환합니다. 또한 fabs()는 복소수(complex number)를 지원하지 않기 때문에, 복소수를 인자로 전달하면 TypeError 오류가 발생합니다. 반면 abs()는 복소수의 크기(magnitude)를 계산할 수 있습니다.
예제 코드
import math n = -23 print(abs(n)) print(math.fabs(n)) n = 21.4 print(abs(n)) print(math.fabs(n)) n = complex(10, 12) print(abs(n)) # print(math.fabs(n)) – 복소수를 전달하면 TypeError 발생
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
23 23.0 21.4 21.4 15.620499351813308
결과 분석
-23에 대해 abs()는 정수형 23을 반환한 반면, math.fabs()는 부동소수점형 23.0을 반환했습니다. 실수 21.4의 경우 두 함수 모두 동일하게 21.4를 반환했습니다.
마지막으로 복소수 complex(10, 12)의 경우, abs()는 복소수의 크기를 나타내는 15.620499351813308(√(10² + 12²))을 정상적으로 계산했지만, math.fabs()에 복소수를 전달하면 오류가 발생합니다.
정리
abs(): 내장 함수, 입력값의 자료형(int/float/complex)을 유지하며 절댓값 반환, 복소수 크기 계산 가능math.fabs(): math 모듈의 함수, 항상 float 타입으로 절댓값 반환, 복소수 미지원
따라서 일반적인 용도라면 내장 함수인 abs()를 사용하는 것이 편리하며, 결과를 반드시 실수형으로 얻어야 하는 경우에 math.fabs()를 사용하는 것이 좋습니다.