Floating-point environment (since C++11)
浮動小数点環境は、実装でサポートされている浮動小数点ステータスフラグと制御モードの集合です。これはスレッドローカルです。各スレッドは親スレッドから初期状態の浮動小数点環境を継承します。浮動小数点演算は、異常結果や補助情報を示すために浮動小数点ステータスフラグを変更します。浮動小数点制御モードの状態は、一部の浮動小数点演算の結果に影響を与えます。
浮動小数点環境へのアクセスと変更は、
#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 documentation
for
Floating-point environment
|