FREXP, FREXPF, FREXPL
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