• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <cfenv>

    std::fesetexceptflag

    namespace std {
      int fesetexceptflag(const fexcept_t *flagp, int excepts);
    }
    

    概要

    浮動小数点例外を発生させずに、浮動小数点例外の状態を設定する。

    効果

    flagpが指す浮動小数点例外の状態のうち、exceptsで指定された種類の浮動小数点例外のみを、現在の浮動小数点例外の状態として設定する。

    この関数は、浮動小数点例外を発生させない。

    戻り値

    • excepts0であった場合、この関数は0を返す
    • 指定された浮動小数点例外を正しく設定できた場合、この関数は0を返す
    • それ以外の場合、この関数は0以外を返す

    #include <cassert>
    #include <cfenv>
    
    int main()
    {
      // ゼロ割りを発生させる
      float result = 1.0f / 0.0f;
    
      // 現在の浮動小数点例外の状態を取得
      std::fexcept_t excepts = 0;
      std::fegetexceptflag(&excepts, FE_ALL_EXCEPT);
    
      int div_by_zero_state = std::fetestexcept(FE_DIVBYZERO);
    
      // 浮動小数点例外の状態を変更する
      std::feclearexcept(FE_ALL_EXCEPT);
      assert(std::fetestexcept(FE_DIVBYZERO) == 0);
    
      // 保持しておいた浮動小数点例外の状態のうち、
      // ゼロ除算の状態のみを復旧させる
      std::fesetexceptflag(&excepts, FE_DIVBYZERO);
      assert(div_by_zero_state == std::fetestexcept(FE_DIVBYZERO));
    }
    

    出力

    バージョン

    言語

    • C++11

    処理系

    • Clang: 3.0
    • GCC: 4.3.0
    • ICC: ??
    • Visual C++: 2013 , 2015
      • コンパイルオプション/fp:strictまたは#pragma fenv_access (on)が必要。さもなくば、正しく動作しないおそれがある。