실수 판별식 매크로

int isgreater(real-floating x, real-floating y); x>y 매크로 함수

int isgreaterequal(real – floating x, real – floating y); x>=y 매크로 함수

int isless(real-floating x, real-floating y); x<y 매크로 함수

int islessequal(real-floating x, real-floating y); x<=y 매크로 함수

int islessgreater(real-floating x, real-floating y); (x>y)||(x<y) 매크로 함수

int isunordered(real-floating x, real-floating y); (isnan(x)||isnan(y)) 매크로 함수

int fpclassify(real-floating x); x가 어떤 종류의 값인지 판별

int isfinite(real – floating x); x가 inf가 아닌지 판별

int isnan(real-floating x); x가 nan인지 판별

int isinf(real-floating x); x가 inf인지 팔별

int signbit(real-floating x); x가 음수인지 판별

math.h 에서는 실수에 관한 다양한 판별식 매크로 함수를 제공합니다. 다음의 예제는 실수에 관한 다양한 판별식 매크로 함수를 사용하는 예제입니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//int isgreater(real-floating x, real-floating y); x>y 매크로 함수
//int isgreaterequal(real - floating x, real - floating y); x>=y 매크로 함수
//int isless(real-floating x, real-floating y); x<y 매크로 함수
//int islessequal(real-floating x, real-floating y); x<=y 매크로 함수
//int islessgreater(real-floating x, real-floating y); (x>y)||(x<y) 매크로 함수
//int isunordered(real-floating x, real-floating y); (isnan(x)||isnan(y)) 매크로 함수
//int fpclassify(real-floating x); x가 어떤 종류의 값인지 판별
//int isfinite(real - floating x); x가 inf가 아닌지 판별
//int isnan(real-floating x); x가 nan인지 판별
//int isinf(real-floating x); x가 inf인지 팔별
//int signbit(real-floating x); x가 음수인지 판별
//math.h 에서 제공하는 매크로 판별식 사용

#include <math.h>
#include <stdio.h>

int main(void)
{
    double d1 = 1.0, d2 = 0.0, d3=-1.0;
    double d4 = d1 / d2;//inf
    double d5 = nan("");//nan

    printf("%f>%f   : %d\n",d1,d2, isgreater(d1,d2));
    printf("%f>=%f : %d\n",d1,d2, isgreaterequal(d1,d2));
    printf("%f<%f   : %d\n",d1,d2, isless(d1,d2));
    printf("%f<=%f : %d\n", d1, d2,islessequal(d1, d2));
    printf("%f>%f || %f<%f : %d\n", d1,d2,d1,d2,islessgreater(d1, d2));
    printf("%f or %f is nan: %d\n",d1,d5, isunordered(d1, d5));

    printf("실수 분류 (nan:%d, inf:%d, normal:%d, subnormal:%d, zeor:%d)\n",
            FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO);
    printf("%f 분류: %d\n", d1, fpclassify(d1));
    printf("%f 분류: %d\n", d2, fpclassify(d2));
    printf("%f 분류: %d\n", d3, fpclassify(d3));
    printf("%f 분류: %d\n", d4, fpclassify(d4));
    printf("%f 분류: %d\n", d5, fpclassify(d5));

    printf("%f is finite: %d\n", d4, isfinite(d4));
    printf("%f is nan: %d\n", d5, isnan(d5));
    printf("%f is infinite: %d\n", d4, isinf(d4));
    if (signbit(d3))
    {
        printf("%f is 음수\n", d3);
    }
    else
    {
        printf("%f is 양수\n", d3);
    }
    return 0;
}

출력

1.000000>0.000000   : 1
1.000000>=0.000000 : 1
1.000000<0.000000   : 0
1.000000<=0.000000 : 0
1.000000>0.000000 || 1.000000<0.000000 : 1
1.000000 or nan is nan: 1
classify (nan:2, inf:1, normal:-1, subnormal:-2, zeor:0)
1.000000 classify: -1
0.000000 classify: 0
-1.000000 classify: -1
inf classify: 1
nan classify: 2
inf is finite: 0
nan is nan: 1
inf is infinite: 1
-1.000000 is 음수