Namespaces
Variants

fegetenv, fesetenv

From cppreference.net
< c ‎ | numeric ‎ | fenv
헤더 파일에 정의됨 <fenv.h>
int fegetenv ( fenv_t * envp ) ;
(1) (C99부터)
int fesetenv ( const fenv_t * envp ) ;
(2) (C99부터)

1) 부동 소수점 환경의 상태를 envp 가 가리키는 객체에 저장하려 시도합니다.

2) envp 가 가리키는 객체로부터 부동소수점 환경을 설정하려 시도합니다. 해당 객체의 값은 이전에 feholdexcept 또는 fegetenv 호출을 통해 얻었거나 부동소수점 매크로 상수여야 합니다. 만약 부동소수점 상태 플래그 중 어떤 것이 envp 에 설정되어 있다면, 해당 플래그들은 환경에도 설정됩니다(그리고 fetestexcept 로 테스트 가능합니다). 하지만 해당 부동소수점 예외들은 발생하지 않습니다(실행이 중단 없이 계속됩니다).

목차

매개변수

envp - fenv_t 타입의 객체를 가리키는 포인터로, 부동소수점 환경의 상태를 보유함

반환값

0 성공 시 0, 그렇지 않으면 0이 아닌 값.

예제

#include <stdio.h>
#include <math.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("현재 발생한 예외: ");
    if(fetestexcept(FE_DIVBYZERO))     printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)(" FE_DIVBYZERO");
    if(fetestexcept(FE_INEXACT))       printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)(" FE_INEXACT");
    if(fetestexcept(FE_INVALID))       printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)(" FE_INVALID");
    if(fetestexcept(FE_OVERFLOW))      printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("FE_OVERFLOW");
    if(fetestexcept(FE_UNDERFLOW))     printf("FE_UNDERFLOW");
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)(" 없음");
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("\n");
}
void show_fe_rounding_method(void)
{
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 그대로 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지됩니다)("현재 반올림 방법:    ");
    switch (fegetround()) {
           case FE_TONEAREST:  printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지됩니다) ("FE_TONEAREST");  break;
           case FE_DOWNWARD:   printf ("FE_DOWNWARD");   break;
           case FE_UPWARD:     printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 그대로 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지됩니다) ("FE_UPWARD");     break;
           case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break;
           default:            printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다) ("알 수 없음");
    };
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 그대로 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지됩니다)("\n");
}
void show_fe_environment(void)
{
    show_fe_exceptions();
    show_fe_rounding_method();
}    
int main(void)
{
    fenv_t curr_env;
    int rtn;
    /* 기본 환경을 표시합니다. */
    show_fe_environment();
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 그대로 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지됩니다)("\n");
    /* 기본 환경에서 일부 계산을 수행합니다. */
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* 두 정수의 중간 지점 */
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 그대로 보존하면서, 번역이 필요한 텍스트가 없으므로 동일하게 유지합니다)("+12.5 -> %+4.1f\n", rint(+12.5)); /* 두 정수의 중간 지점 */
    show_fe_environment();
    printf("\n");
    /* 현재 환경을 저장합니다. */
    rtn = fegetenv(&curr_env);
    /* 새로운 반올림 방법으로 일부 계산을 수행합니다. */
    feclearexcept(FE_ALL_EXCEPT);
    fesetround(FE_DOWNWARD);
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("1.0/0.0 = %f\n", 1.0/0.0);
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("+11.5 -> %+4.1f\n", rint(+11.5));
    printf("+12.5 -> %+4.1f\n", rint(+12.5));
    show_fe_environment();
    printf
(설명: 원본 HTML 태그와 속성,  태그 내의 C++ 용어를 모두 보존하면서, 번역이 필요한 일반 텍스트가 없으므로 동일하게 유지합니다)("\n");
    /* 이전 환경을 복원합니다. */
    rtn = fesetenv(&curr_env);
    show_fe_environment();
    return 0;
}

출력:

현재 발생한 예외: 없음
현재 반올림 방식:   FE_TONEAREST
+11.5 -> +12.0
+12.5 -> +12.0
현재 발생한 예외: FE_INEXACT
현재 반올림 방식:   FE_TONEAREST
1.0/0.0 = inf
+11.5 -> +11.0
+12.5 -> +12.0
현재 발생한 예외: FE_DIVBYZERO FE_INEXACT
현재 반올림 방식:   FE_DOWNWARD
현재 발생한 예외: FE_INEXACT
현재 반올림 방식:   FE_TONEAREST

참고문헌

  • C11 표준 (ISO/IEC 9899:2011):
  • 7.6.4.1 fegetenv 함수 (p: 213)
  • 7.6.4.3 fesetenv 함수 (p: 214)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.6.4.1 fegetenv 함수 (p: 194)
  • 7.6.4.3 fesetenv 함수 (p: 195)

참조 항목

환경을 저장하고, 모든 상태 플래그를 지우며, 이후 모든 오류를 무시함
(함수)
부동 소수점 환경을 복원하고 이전에 발생한 예외를 발생시킴
(함수)
기본 부동 소수점 환경
(매크로 상수)
C++ 문서 for fegetenv , fesetenv