FPGETROUND(3)

명칭
fpgetround, fpsetround, fpsetprec, fpgetprec, fpgetmask, fpsetmask, fpgetsticky, fpresetsticky - IEEE 부동 소수점 인터페이스

서식
<ieeefp.h>

    typedef enum {
           FP_RN,          /* round to nearest */
           FP_RM,          /* round down to minus infinity */
           FP_RP,          /* round up to plus infinity */
           FP_RZ           /* truncate */
    } fp_rnd_t;

    fp_rnd_t
    fpgetround(void)
    fp_rnd_t
    fpsetround(fp_rnd_t direction)

        typedef enum {
               FP_PS,          /* 24 bit (single-precision) */
               FP_PRS,         /* reserved */
               FP_PD,          /* 53 bit (double-precision) */
               FP_PE           /* 64 bit (extended-precision) */
        } fp_prec_t;

    fp_prec_t
    fpgetprec(void)
    fp_prec_t
    fpsetprec(fp_prec_t precision)

        #define fp_except_t    int
        #define FP_X_INV       0x01    /* invalid operation */
        #define FP_X_DNML      0x02    /* denormal */
        #define FP_X_DZ                0x04    /* zero divide */
        #define FP_X_OFL       0x08    /* overflow */
        #define FP_X_UFL       0x10    /* underflow */
        #define FP_X_IMP       0x20    /* (im) precision */
        #define FP_X_STK       0x40    /* stack fault */

    fp_except_t
    fpgetmask(void)
    fp_except_t
    fpsetmask(fp_except_t mask)
    fp_except_t
    fpgetsticky(void)
    fp_except_t
    fpresetsticky(fp_except_t sticky)

해설
부동 소수점 예외가 검출되면(자), 예외 스티키후라그가 설정되어 예외 마스크 하지만 검사됩니다. 마스크가 설정되어 있는 경우는 트랩이 발생합니다. 이 routine에서는, 부동 소수점 예외 마스크의 설정, 및 예외가 발생한 다음에의 예외 스티키후라그의 리셋트가 생깁니다. 부동 소수점 둥근 모드와 정밀도도 설정할 수 있습니다.

fpgetround() 함수는, 현재의 부동 소수점 둥근 모드를 되돌립니다.

fpsetround() 함수는, 부동 소수점 둥근 모드를 설정해, 전의 모드를 되돌립니다.

fpgetprec() 함수는, 현재의 부동 소수점 정밀도를 되돌립니다.

fpsetprec() 함수는, 부동 소수점 정밀도를 설정해, 전의 정밀도를 되돌립니다.

fpgetmask() 함수는, 현재의 부동 소수점 예외 마스크를 되돌립니다.

fpsetmask() 함수는, 부동 소수점 예외 마스크를 설정해, 전의 마스크를 되돌립니다.

fpgetsticky() 함수는, 현재의 부동 소수점 스티키후라그를 되돌립니다.

fpresetsticky() 함수는, 부동 소수점 스티키후라그를 클리어 해, 전의 플래그 (을)를 되돌립니다.

이하는, 0 제산에 의한 트랩을 막는 코드예입니다.

    fpsetmask(~FP_X_DZ);
    a = 1.0;
    b = 0;
    c = a / b;
    fpresetsticky(FP_X_DZ);
    fpsetmask(FP_X_DZ);

관련 항목
isnan(3)

경고
부동 소수점 예외가 발생한 후, 한편, 마스크를 설정하기 전에, 스티키후라그를 리셋트 할 필요가 있습니다. 스티키후라그를 리셋트 하기 전에 다른 예외가 발생했을 경우는, 잘못한 예외 타입이 통지되는 일이 있습니다.

역사
이 routine는, 같은 이름의 SysV/386 routine에 근거하고 있습니다.