티스토리 뷰

C | C++

산술 연산 함수

야라바 2018. 6. 29. 11:28
728x90

☞ abs, fabs, frexp, ldexp, ceil, floor, trunc, round, modf, fmod, remainder

<math.h>
<stdlib.h>

int abs(int number);
long int labs(long int number);
long long int llabs(long long int number);
double fabs(double number);
float fabsf(float number);
long double fabsl(long double number);
double frexp(double value, int *exponent);
float frexpf(float value, int *exponent);
long double frexpl(long double value, int *exponent);
double ldexp(double value, int exponent);
float ldexpf(float value, int exponent);
long double ldexpl(long double value, int exponent);
double ceil(double x);
float ceilf(float x);
long double ceill(long double x);
double floor(double x);
float floorf(float x);
long double floorl(long double x);
double trunc(double x);
float truncf(float x);
long double truncl(long double x);
double round(double x);
float roundf(float x);
long double roundl(long double x);
double modf(double value, double *integerpart);
float modff(float value, float *integerpart);
long double modfl(long double value, long double *integerpart);
double fmod(double numerator, double denominator);
float fmodf(float numerator, float denominator);
long double fmodl(long double numerator, long double denominator);
double remainder(double numerator, double denominator);
float remainderf(float numerator, float denominator);
long double remainderl(long double numerator, long double denominator);

abs()는 정수 타입의 절대값을 fabs()는 부동소수점 타입의 절대값을 리턴합니다. 정수 타입은 기본 타입은 int이고 함수 이름 앞에 l-을 붙여 long 타입, ll-을 붙여 long long 타입에 대한 절대값을 구하고 부동소수점 타입은 기본 타입은 double이고 함수 이름 뒤에 -f를 붙여 float타입을 -l을 붙여 long double 타입에 대한 절대값을 구합니다.
frexp()는 값(value)을 정규화하여 지수부는 exponent로 전달한 정수 포인터의 위치에 저장하고 0.5 ~ 1 사이의 가수부를 리턴합니다. 값(value)은 리턴된 가수부 * 2의 지수부 승의 형태입니다.
ldexp()는 값(value) * 2의 exponent 승의 값을 리턴합니다.

ceil()은 x 보다 큰 가장 가까운 정수를 부동소수점으로 리턴합니다. 올림. ceil(2.5)=3.0, ceil(-2.5)=-2.0
floor()는 x 보다 작은 가장 가까운 정수를 부동소수점으로 리턴합니다. 내림. floor(2.5)=2.0, floor(-2.5)=-3.0
trunc()는 0 방향으로 가장 가까운 정수를 부동소수점으로 리턴합니다. 버림. trunc(2.5)=2.0, trunc(-2.5)=-2.0
round()는 가장 가까운 정수를 부동소수점으로 리턴합니다. 반올림. round(2.5)=3.0, round(-2.5)=-3.0

modf()는 값(value)을 정수부와 소수부로 나누어서 정수부는 전달한 포인터 integerpart에 부동소수점수로 저장하고 소수부는 함수 결과로 리턴합니다.
fmod()는 부동소수점의 나머지를 구하는 것으로 직접 numerator/denominator를 수행하는 것이 아니라 numerator 보다 크지 않은 정수 n * denominator를 찾아서 numerator - ( n * denominator)를 리턴합니다.
remainder()는 fmod()와 유사하지만 numerator 보다 크지 않은 정수 n * denominator를 찾는 것이 아니라 numerator과 가장 가까운 정수 n * denominator를 찾아서 numerator - ( n * denominator)를 리턴합니다.



☞ 예제1

......
case DB_TYPE_BIGINT:
    bi2 = db_get_bigint (value2);
    if (bi2 == 0)
    {
        db_make_bigint (result, s1);
    }
    else
    {
        db_make_bigint (result, (DB_BIGINT) (s1 % bi2));
    }
    break;
case DB_TYPE_FLOAT:
    f2 = db_get_float (value2);
    if (f2 == 0)
    {
        db_make_float (result, s1);
    }
    else
    {
        db_make_float (result, (float) fmod ((float) s1, f2));
    }
    break;
......    

위의 코드는 큐브리드 DBMS의 코드 일부로 나머지 연산에 대해서 정수 타입은 %로 나머지를 구하고 있지만 실수에 대해서는 fmod() 함수를 사용하고 있음을 확인할 수 있습니다.




728x90

'C | C++' 카테고리의 다른 글

문자열과 실수 변환  (0) 2018.06.29
문자열의 정수 변환  (0) 2018.06.29
정수 나누기 함수  (0) 2018.06.29
난수 함수  (0) 2018.06.29
지수와 로그 함수  (0) 2018.06.29