ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
2.11.3 does_not_read_global_data
2.11.5 does_not_write_global_data
2.11.26 warn_missing_parameter_info
2.14.5 __FUNCTION__ と __PRETTY_FUNCTION__
2.16.1 -I- オプションによる検索アルゴリズムの変更
2.18 Intel MMX および拡張 x86 プラットフォーム組み込み関数のためのコンパイラサポート
この節では、IEEE 754 浮動小数点のデフォルトの演算である「無停止」の概要を説明します。アンダーフローは「段階的」です。詳細は、『数値計算ガイド』を参照してください。
「無停止」とは、ゼロによる除算、浮動小数点のオーバーフロー、不正演算例外などが生じても実行を停止しないことを意味します。たとえば次の式で、x はゼロ、y は正の数であるとします。
z = y / x;
デフォルトでは、z の値は +Inf になりますが、プログラムの実行は続けられます。ただし、-fnonstd オプションを使用した場合は、このコードによってプログラムが終了します (コアダンプなど)。
次の例では、段階的アンダーフローの動作方法を示します。次のようなコードを例として考えます。
x = 10; for (i = 0; i < LARGE_NUMBER; i++) x = x / 10;
ループをはじめて通ると x は 1 になり、2 回目で 0.1、3 回目で 0.01 と続き、やがてはマシンによって値を表現できる許容範囲の下限に到達します。次にループを実行すると、どうなるのでしょうか。
表現可能な最小の数が 1.234567e-38 であると仮定します。
次にループを実行すると、仮数部から「盗んだ」ものを指数部に「与える」ことによって数値が修正され、新しい値 1.23456e-39 になります。その次はさらに、1.2345e-40 と続いていきます。この動作は「段階的アンダーフロー」と呼ばれ、これがデフォルトになります。標準以外のモードでは、この「盗み」は発生せず、単に x がゼロに設定されます。