fegetenv, fesetenv
From cppreference.net
|
헤더 파일에 정의됨
<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)
참조 항목
|
(C99)
|
환경을 저장하고, 모든 상태 플래그를 지우며, 이후 모든 오류를 무시함
(함수) |
|
(C99)
|
부동 소수점 환경을 복원하고 이전에 발생한 예외를 발생시킴
(함수) |
|
(C99)
|
기본 부동 소수점 환경
(매크로 상수) |
|
C++ 문서
for
fegetenv
,
fesetenv
|
|