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
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
FLOOR, FLOORF, FLOORL (0) | 2016.01.03 |
---|---|
FMOD, FMODF, FMODL (0) | 2016.01.03 |
CEIL, CEILF, CEILL (0) | 2016.01.03 |
POW, POWF, POWL (0) | 2016.01.03 |
HYPOT, HYPOTF, HYPOTL (0) | 2016.01.03 |
MODF, MODFF, MODFL (0) | 2016.01.03 |
LOG, LOGF, LOGL (0) | 2016.01.03 |
LDEXP, LDEXPF, LDEXPL (0) | 2016.01.03 |
LOG1P, LOG1PF, LOG1PL (0) | 2016.01.03 |
TAN, TANF, TANL (0) | 2016.01.03 |