最終更新日時:
が更新

履歴 編集

function
<cfenv>

std::feraiseexcept(C++11)

namespace std {
  int feraiseexcept(int excepts);
}

概要

パラメータexceptsで指定された浮動小数点例外を発生させる。

効果

パラメータexceptsで指定された浮動小数点例外を発生させる。exceptsには、ビットORを使用して複数の浮動小数点例外を指定できる。この効果は、算術演算によって発生する浮動小数点例外と同様。発生する例外の順序は未規定。

FE_OVERFLOWもしくはFE_UNDERFLOWが指定されたときに、追加でFE_INEXACTも発生させるかは実装定義。

戻り値

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

#include <iostream>
#include <cfenv>

int main()
{
  // FE_INVALIDFE_OVERFLOWの、2つの浮動小数点例外を発生させる
  std::feraiseexcept(FE_INVALID | FE_OVERFLOW);

  // 浮動小数点例外の状態を確認
  int excepts = std::fetestexcept(FE_ALL_EXCEPT);
  if (excepts & FE_DIVBYZERO) {
    std::cout << "divide-by-zero" << std::endl;
  }
  if (excepts & FE_INEXACT) {
    std::cout << "inexact" << std::endl;
  }
  if (excepts & FE_INVALID) {
    std::cout << "invalid" << std::endl;
  }
  if (excepts & FE_OVERFLOW) {
    std::cout << "overflow" << std::endl;
  }
  if (excepts & FE_UNDERFLOW) {
    std::cout << "underflow" << std::endl;
  }
}

出力例

inexact
invalid
overflow

バージョン

言語

  • C++11

処理系

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