double frexp(double value, int *exp); 지수와 가수 계산
float frexpf(float value, int *exp); 지수와 가수 계산
long double frexpl(long double value, int *exp); 지수와 가수 계산
입력 매개 변수 리스트
value 계산에 사용할 값
exp 지수를 설정할 메모리 주소
반환 값
가수
frexp 함수는 입력 인자로 받은 value 값을 2진수로 계산할 때 지수부와 가수부를 계산합니다. 가수부는 함수의 결과로 반환하며 지수는 두번째 인지로 전달한 메모리 주소에 설정합니다. 반환받은 값을 mantissa라 하고 두번째 인력 인자로 exp 변수의 주소를 전달했다면 value = mantissa*2^exp 를 성립합니다.
사용 예
//C언어 표준 라이브러리 함수 가이드 //double frexp(double value, int *exp); 지수와 가수 계산 //float frexpf(float value, int *exp); 지수와 가수 계산 //long double frexpl(long double value, int *exp); 지수와 가수 계산 //특정 실수가 x*2^exp 인지 확인 #include <math.h> #include <stdio.h> int main(void) { double value; double exp; float expf; long double expl; int mantissa; value = 1.0; exp = frexp(value, &mantissa); printf("%f = %f*2^%d \n", value, exp, mantissa); value = 2.0; exp = frexp(value, &mantissa); printf("%f = %f*2^%d \n", value, exp, mantissa); value = 4.0; exp = frexp(value, &mantissa); printf("%f = %f*2^%d \n", value, exp, mantissa); value = 0.5; exp = frexp(value, &mantissa); printf("%f = %f*2^%d \n", value, exp, mantissa); value = 3.5; exp = frexp(value, &mantissa); printf("%f = %f*2^%d \n", value, exp, mantissa); value = 0.1; exp = frexp(value, &mantissa); expf = frexpf((float)value, &mantissa); expl = frexpl(value, &mantissa); printf("frexp 함수 사용: %f = %.30f*2^%d \n", value, exp, mantissa); printf("frexpf 함수 사용: %f = %.30f*2^%d \n", value, expf, mantissa); printf("frexpl 함수 사용: %f = %.30f*2^%d \n", value, expl, mantissa); return 0; }
출력
1.000000 = 0.500000*2^1 2.000000 = 0.500000*2^2 4.000000 = 0.500000*2^3 0.500000 = 0.500000*2^0 3.500000 = 0.875000*2^2 frexp 함수 사용: 0.100000 = 0.800000000000000044408920985006*2^-3 frexpf 함수 사용: 0.100000 = 0.800000011920928955078125000000*2^-3 frexpl 함수 사용: 0.100000 = 0.800000000000000044408920985006*2^-3