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