feholdexcept
|
헤더 파일에 정의됨
<fenv.h>
|
||
|
int
feholdexcept
(
fenv_t
*
envp
)
;
|
(C99부터) | |
먼저, 현재 부동 소수점 환경을
envp
가 가리키는 객체에 저장합니다
(
fegetenv
와 유사). 그런 다음 모든 부동 소수점 상태 플래그를 지우고, 비트랩 모드를 설정합니다: 이후 부동 소수점 예외는 실행을 중단하지 않으며(트랩되지 않음),
feupdateenv
또는
fesetenv
에 의해 부동 소수점 환경이 복원될 때까지 이 상태가 유지됩니다.
이 함수는 호출자에게 발생시킬 수 있는 부동 소수점 예외를 숨겨야 하는 서브루틴의 시작 부분에서 사용될 수 있습니다. 일부 예외만 억제하고 다른 예외는 보고해야 하는 경우, 원치 않는 예외를 클리어한 후 feupdateenv 호출로 논스톱 모드를 종료하는 것이 일반적입니다.
목차 |
매개변수
| envp | - | fenv_t 타입의 객체를 가리키는 포인터로, 부동 소수점 환경이 저장될 위치 |
반환값
0 성공 시 0, 그렇지 않으면 0이 아닌 값.
예제
#include <stdio.h> #include <fenv.h> #include <float.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("current exceptions raised: "); if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO"); if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT"); if(fetestexcept(FE_INVALID)) printf(" FE_INVALID"); if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW"); if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW"); if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none"); printf("\n"); } double x2 (double x) /* times two */ { fenv_t curr_excepts; /* Save and clear current f-p environment. */ feholdexcept(&curr_excepts); /* Raise inexact and overflow exceptions. */ printf("In x2(): x = %f\n", x=x*2.0); show_fe_exceptions(); feclearexcept(FE_INEXACT); /* hide inexact exception from caller */ /* Merge caller's exceptions (FE_INVALID) */ /* with remaining x2's exceptions (FE_OVERFLOW). */ feupdateenv(&curr_excepts); return x; } int main(void) { feclearexcept(FE_ALL_EXCEPT); feraiseexcept(FE_INVALID); /* some computation with invalid argument */ show_fe_exceptions(); printf("x2(DBL_MAX) = %f\n", x2(DBL_MAX)); show_fe_exceptions(); return 0; }
출력:
current exceptions raised: FE_INVALID In x2(): x = inf current exceptions raised: FE_INEXACT FE_OVERFLOW x2(DBL_MAX) = inf current exceptions raised: FE_INVALID FE_OVERFLOW
참고문헌
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.6.4.2 feholdexcept 함수 (p: 213-214)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.6.4.2 feholdexcept 함수 (p: 194-195)
참조 항목
|
(C99)
|
부동 소수점 환경을 복원하고 이전에 발생한 예외를 발생시킴
(함수) |
|
(C99)
|
현재 부동 소수점 환경을 저장하거나 복원함
(함수) |
|
(C99)
|
기본 부동 소수점 환경
(매크로 상수) |
|
C++ 문서
for
feholdexcept
|
|