浮動小数点環境
提供: cppreference.com
浮動小数点環境は処理系がサポートしている浮動小数点のステータスフラグと制御モードのセットです。 これらはスレッドローカルであり、各スレッドは親スレッドから浮動小数点環境の初期状態を引き継ぎます。 浮動小数点演算は異常な結果や補助情報を示すために浮動小数点ステータスフラグを変更します。 浮動小数点制御モードの状態はいくつかの浮動小数点演算の結果に影響を与えます。
浮動小数点環境へのアクセスおよび変更は #pragma STDC FENV_ACCESS が ON
の場合に限り意味があります。 そうでなければ、処理系は浮動小数点制御モードが常にデフォルトであるとか、浮動小数点ステータスフラグが検査されたり変更されたりすることはないと仮定することがあります。 実際のところ、現行のいくつかのコンパイラ (HP aCC, Oracle Studio, IBM XL) は #pragma
を明示的にサポートしていますが、ほとんどのコンパイラは関係なく浮動小数点環境への意味あるアクセスを認めています。
目次 |
[編集]型
ヘッダ <cfenv> で定義 | |
fenv_t | 浮動小数点環境全体を表す型 |
fexcept_t | すべての浮動小数点ステータスフラグを集合的に表す型 |
[編集]関数
(C++11) | 指定された浮動小数点ステータスフラグをクリアします (関数) |
(C++11) | 指定された浮動小数点ステータスフラグのいずれが設定されているか調べます (関数) |
(C++11) | 指定された浮動小数点例外を発生させます (関数) |
(C++11)(C++11) | 指定された浮動小数点ステータスフラグを浮動小数点環境から取得または設定します (関数) |
(C++11)(C++11) | 丸め方向を取得または設定します (関数) |
(C++11) | 現在の浮動小数点環境を保存または復元します (関数) |
(C++11) | 環境を保存し、すべてのステータスフラグをクリアし、今後のすべてのエラーを無視します (関数) |
(C++11) | 浮動小数点環境を復元し、以前に発生した例外を発生させます (関数) |
[編集]マクロ
浮動小数点例外 (マクロ定数) | |
浮動小数点の丸め方向 (マクロ定数) | |
(C++11) | デフォルトの浮動小数点環境 (マクロ定数) |
[編集]ノート
浮動小数点例外は C++ の例外とは無関係です。 浮動小数点演算が浮動小数点例外を発生させると、浮動小数点環境のステータス (std::fetestexcept で調べられます) は変更されますが、ほとんどの処理系では C++ プログラムの実行は割り込まれることなく継続します。
浮動小数点例外が発生したとき自動的に C++ の例外を発生させるために使用できるコンパイラ拡張があります。
- GNU libc の関数
feenableexcept()
は浮動小数点例外のトラップを有効化し、SIGFPE
シグナルを生成します。 コンパイラオプション-fnon-call-exceptions
が使用されていれば、そのシグナルハンドラからユーザ定義の C++ 例外を投げることもできます。 - MSVC の関数
_control87()
は浮動小数点例外のトラップを有効化し、ハードウェア例外を生成し、_set_se_translator
を使用して C++ の例外に変換できます。
[編集]関連項目
浮動小数点環境 の C言語リファレンス |