浮動小数点環境 (C++11以降)
From cppreference.com
浮動小数点環境は、実装がサポートする浮動小数点ステータスフラグと制御モードの集合です。これはスレッドローカルです。各スレッドは、親スレッドから浮動小数点環境の初期状態を継承します。浮動小数点演算は、異常な結果や補助情報を示すために浮動小数点ステータスフラグを変更します。浮動小数点制御モードの状態は、一部の浮動小数点演算の結果に影響を与えます。
浮動小数点環境へのアクセスと変更が意味を持つのは、 #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++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言語ドキュメンテーション Floating-point environment
|