SPARC: SPARC 非標準浮動小数点モードを有効または無効にします。
-fns=yes (または-fns) を指定すると、プログラムが実行を開始するときに、非標準浮動小数点モードが有効になります。
このオプションを使うと、-fns を含むほかのマクロオプション (-fast など) のあとで非標準と標準の浮動小数点モードを切り替えることができます。
一部の SPARC デバイスでは、非標準浮動小数点モードで「段階的アンダーフロー」が無効にされ、非正規の数値を生成する代わりに、小さい値がゼロにフラッシュされます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。
段階的アンダーフローや、非正規の数値をハードウェアでサポートしない SPARC デバイスでは、-fns=yes (または -fns) を使用すると、プログラムによってはパフォーマンスが著しく向上することがあります。
(x86) SSE flush-to-zero モードを選択します。利用可能な場合には、denormals-are-zero モードが選択されます。
このオプションは、非正規数の結果をゼロにフラッシュします。また利用可能な場合には、非正規数オペランドもゼロとして扱われます。
このオプションは、SSE や SSE2 命令セットを利用しない従来の x86 浮動小数点演算には影響しません。
-fns オプションには次の値を指定できます。
表 A–10 -fns の値
値 |
意味 |
---|---|
yes |
非標準浮動小数点モードを選択します。 |
no |
標準浮動小数点モードを選択します。 |
-fns を指定しないと、非標準浮動小数点モードは自動的には有効にされません。標準の IEEE 754 浮動小数点計算が行われます。つまり、アンダーフローは段階的です。
-fns だけを指定すると、-fns=yes が想定されます。
次の例では、-fast は複数のオプションに展開され、その中には -fns=yes (非標準浮動小数点モードを選択する) も含まれます。ところが、そのあとに続く -fns=no が初期設定を変更するので、結果的には、標準の浮動小数点モードが使用されます。
example% CC foo.cc -fast -fns=no |
非標準モードが有効になっていると、浮動小数点演算によって、IEEE 754 規格の条件に合わない結果が出力されることがあります。
1 つのルーチンを -fns オプションでコンパイルした場合は、そのプログラムのすべてのルーチンを -fns オプションでコンパイルする必要があります。コンパイルしない場合、予期しない結果が生じることがあります。
このオプションは、SPARC プラットフォームでメインプログラムをコンパイルするときしか有効ではありません。x86 プラットフォームでは、このオプションは無視されます。
-fns=yes (または -fns) オプションを使用したときに、通常は IEEE 浮動小数点トラップハンドラによって管理される浮動小数点エラーが発生すると、次のメッセージが返されることがあります。
『数値計算ガイド』、ieee_sun(3M)