Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.4 浮動小数点 (非標準モード)

このセクションでは、IEEE 754 浮動小数点のデフォルト演算である「 無停止」のサマリーを示します。アンダーフローは「 段階的」です。詳細な情報については、『数値計算ガイド』を参照してください。

「無停止」とは、ゼロによる除算、浮動小数点のオーバーフロー、不正演算例外などが生じても実行を停止しないことを意味します。たとえば次の式で、x はゼロ、y は正の数であるとします。

z = y / x;

デフォルトでは、z の値は +Inf になりますが、プログラムの実行は続けられます。ただし、-fnonstd オプションを使用した場合は、このコードによってプログラムが終了します (コアダンプなど)。

次の例では、段階的アンダーフローの動作方法を示します。次のようなコードを例として考えます。

x = 10;
for (i = 0; i < LARGE_NUMBER; i++)
x = x / 10;

ループをはじめて通ると x1 になり、2 回目で 0.1、3 回目で 0.01 と続き、やがてはマシンによって値を表現できる許容範囲の下限に到達します。次にループを実行すると、どうなるのでしょうか。

表現可能な最小の数が 1.234567e-38 であると仮定します。

次にループを実行すると、仮数部から「盗んだ」ものを指数部に「与える」ことによって数値が修正され、新しい値 1.23456e-39 になります。その次はさらに、1.2345e-40 と続いていきます。この動作は「段階的アンダーフロー」と呼ばれ、これがデフォルトになります。標準以外のモードでは、この「盗み」は発生せず、単に x がゼロに設定されます。