C++ frexp() 함수란?
C++의 frexp() 함수는 부동소수점 수를 이진 가수(significand)와 2를 밑으로 하는 정수 지수(exponent)로 분해하는 표준 라이브러리 함수입니다. 함수는 이진 가수를 반환하며, 반환되는 가수 값의 범위는 항상 (0.5, 1) 구간에 속합니다. 만약 인자로 0을 전달하면 가수와 지수 값은 모두 0이 됩니다.
frexp()의 동작 원리는 다음 수식으로 표현할 수 있습니다.
x = significand × (2^exponent)
frexp() 함수의 문법
C++에서 frexp() 함수의 기본 문법은 다음과 같습니다.
float frexp(float variable_name, int* exponent);
매개변수 설명
variable_name − 이진 가수로 분해하고자 하는 부동소수점 값을 담고 있는 변수의 이름입니다.
exponent − 계산된 지수 값이 저장될 int형 포인터입니다.
참고로 C++에서는 float 타입뿐만 아니라 double, long double 타입에 대해서도 오버로드된 버전이 제공되므로, 변수의 타입에 맞게 자동으로 적절한 함수가 호출됩니다.
예제
다음은 C++에서 frexp() 함수를 사용하는 예제입니다.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a = 4;
int b;
cout << "a의 값 : " << a << '\n';
double s = frexp(a, &b);
cout << a << " = " << s << " * 2^" << b;
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.
a의 값 : 4
4 = 0.5 * 2^3
결과 해석
예제에서 입력값 4는 가수 0.5와 지수 3으로 분해되었습니다. 즉, 0.5 × 2³ = 0.5 × 8 = 4가 성립하며, 이는 앞서 소개한 수식 x = significand × (2^exponent)와 정확히 일치합니다. 이처럼 frexp() 함수는 부동소수점의 내부 표현을 분석하거나, 수치 알고리즘에서 정규화된 형태의 값을 얻어야 할 때 유용하게 활용됩니다.