std::fetestexcept
提供: cppreference.com
ヘッダ <cfenv> で定義 | ||
int fetestexcept(int excepts ); | (C++11以上) | |
浮動小数点例外の指定されたサブセットが現在設定されているかどうか調べます。 引数 excepts
は浮動小数点例外マクロのビット単位の論理和です。
目次 |
[編集]引数
excepts | - | 調べる例外フラグを指定するビットマスク |
[編集]戻り値
excepts
に含まれていて、かつ現在設定されている浮動小数点例外に対応する、浮動小数点例外マクロのビット単位の論理和。
[編集]例
Run this code
#include <iostream>#include <cfenv>#include <cmath> #pragma STDC FENV_ACCESS ON volatiledouble zero =0.0;// volatile not needed where FENV_ACCESS is supportedvolatiledouble one =1.0;// volatile not needed where FENV_ACCESS is supported int main(){std::feclearexcept(FE_ALL_EXCEPT);std::cout<<"1.0/0.0 = "<<1.0/ zero <<'\n';if(std::fetestexcept(FE_DIVBYZERO)){std::cout<<"division by zero reported\n";}else{std::cout<<"divsion by zero not reported\n";} std::feclearexcept(FE_ALL_EXCEPT);std::cout<<"1.0/10 = "<< one/10<<'\n';if(std::fetestexcept(FE_INEXACT)){std::cout<<"inexact result reported\n";}else{std::cout<<"inexact result not reported\n";} std::feclearexcept(FE_ALL_EXCEPT);std::cout<<"sqrt(-1) = "<<std::sqrt(-1)<<'\n';if(std::fetestexcept(FE_INVALID)){std::cout<<"invalid result reported\n";}else{std::cout<<"invalid result not reported\n";}}
出力:
1.0/0.0 = inf division by zero reported 1.0/10 = 0.1 inexact result reported sqrt(-1) = -nan invalid result reported
[編集]関連項目
(C++11) | 指定された浮動小数点ステータスフラグをクリアします (関数) |
fetestexcept の C言語リファレンス |