Namespaces
Variants

Floating-point environment (since C++11)

From cppreference.net
Floating-point environment
Functions
(C++11) (C++11)
(C++11) (C++11)
Macro constants
(C++11)

부동 소수점 환경은 구현에서 지원하는 부동 소수점 상태 플래그와 제어 모드의 집합입니다. 스레드 로컬입니다. 각 스레드는 부모 스레드로부터 초기 부동 소수점 환경 상태를 상속받습니다. 부동 소수점 연산은 비정상적인 결과나 보조 정보를 나타내기 위해 부동 소수점 상태 플래그를 수정합니다. 부동 소수점 제어 모드의 상태는 일부 부동 소수점 연산의 결과에 영향을 미칩니다.

부동 소수점 환경 접근 및 수정은 #pragma STDC FENV_ACCESS 가 지원되고 ON 으로 설정된 경우에만 의미가 있습니다. 그렇지 않으면 구현체는 부동 소수점 제어 모드가 항상 기본값이고 부동 소수점 상태 플래그가 테스트되거나 수정되지 않는다고 가정할 수 있습니다. 실제로 HP aCC, Oracle Studio, IBM XL과 같은 소수의 현재 컴파일러만 #pragma 을 명시적으로 지원하지만, 대부분의 컴파일러는 어쨌든 부동 소수점 환경에 의미 있는 접근을 허용합니다.

목차

타입

헤더 파일에 정의됨 <cfenv>
fenv_t
(C++11)
전체 부동소수점 환경을 나타내는 타입
(typedef)
fexcept_t
(C++11)
모든 부동소수점 상태 플래그를 집합적으로 나타내는 타입
(typedef)

함수

지정된 부동 소수점 상태 플래그를 지움
(함수)
지정된 부동 소수점 상태 플래그 중 설정된 것을 확인
(함수)
지정된 부동 소수점 예외를 발생시킴
(함수)
지정된 부동 소수점 상태 플래그의 상태를 부동 소수점 환경에서 복사하거나 부동 소수점 환경으로 복사
(함수)
(C++11) (C++11)
반올림 방향을 얻거나 설정
(함수)
현재 부동 소수점 환경을 저장하거나 복원
(함수)
환경을 저장하고 모든 상태 플래그를 지우며 향후 모든 오류를 무시
(함수)
부동 소수점 환경을 복원하고 이전에 발생한 예외를 다시 발생시킴
(함수)

매크로

부동소수점 예외
(매크로 상수)
부동소수점 반올림 방향
(매크로 상수)
(C++11)
기본 부동소수점 환경
(매크로 상수)

참고 사항

부동 소수점 예외는 C++ 예외와 관련이 없습니다. 부동 소수점 연산이 부동 소수점 예외를 발생시키면, 부동 소수점 환경의 상태가 변경되며, 이는 std::fetestexcept 로 테스트할 수 있지만, 대부분의 구현에서 C++ 프로그램의 실행은 중단 없이 계속됩니다.

부동 소수점 예외가 발생할 때마다 C++ 예외를 자동으로 생성하는 데 사용할 수 있는 컴파일러 확장 기능이 있습니다:

  • GNU libc 함수 feenableexcept() 는 부동 소수점 예외의 트래핑을 활성화하며, 이는 SIGFPE 시그널을 생성합니다. 컴파일러 옵션 -fnon-call-exceptions 이 사용된 경우, 해당 시그널에 대한 핸들러는 사용자 정의 C++ 예외를 throw할 수 있습니다.
  • MSVC 함수 _control87() 는 부동 소수점 예외의 트래핑을 활성화하며, 이는 하드웨어 예외를 생성하고, 이는 _set_se_translator 를 사용하여 C++ 예외로 변환될 수 있습니다.

참고 항목

C 문서 참조: 부동 소수점 환경