ieee_flags (3m) は、次のための Oracle インタフェースです。
ieee_flags(3m) を呼び出すための構文は次のとおりです。
i = ieee_flags(action, mode, in, out);
パラメータに指定できる値の ASCII 文字列をTable 3–13 に示します。
|
ieee_flags(3m) のマニュアルページでは、これらのパラメータが詳細に説明されています。
ieee_flags を使用して変更できる演算機能のいくつかについては、次の段落で説明します。第 4 章には、ieee_flags と IEEE 例外フラグに関する詳細情報が含まれています。
mode が direction である場合は、指定されたアクションが現在の丸め方向に適用されます。指定できる丸め方向は、もっとも近い値に向けた丸め、0 に向けた丸め、+· に向けた丸め、または −· に向けた丸めです。IEEE のデフォルトの丸め方向は、もっとも近い値に向けた丸めです。つまり、演算の数学的な結果が 2 つの隣接する表現可能な数値の間に厳密に存在する場合、数学的な結果にもっとも近い数値が提供されます。(数学的な結果が 2 つのもっとも近い表現可能な数値の正確に中央に存在する場合、提供される結果は最下位ビットが 0 である数値です。この点を強調するために、もっとも近い値に向けた丸めモードは、もっとも近い偶数値への丸めと呼ばれる場合があります。)
0 に向けた丸めは、IEEE が現れる以前の多くのコンピュータの動作方法であり、数学的には結果の切り捨てに対応しています。 たとえば、2/3 が 10 進数 6 桁に丸められた場合の結果は、丸めモードがもっとも近い値に向けた丸めであるときは .666667 ですが、丸めモードが 0 に向けた丸めであるときは .666666 です。
ieee_flags を使用して丸め方向を検査、クリア、または設定する場合に、4 つの入力パラメータに指定できる値をTable 3–14 に示します。
|
mode が precision である場合は、指定されたアクションが現在の丸め精度に適用されます。x86 ベースのシステムでは、指定できる丸め精度は単精度、倍精度、および拡張です。デフォルトの丸め精度は拡張です。このモードでは、結果を x87 浮動小数点レジスタに渡す算術演算は、その結果を拡張倍精度レジスタ形式の完全な 64 ビット精度に丸めます。丸め精度が単精度または倍精度である場合、結果を x87 浮動小数点レジスタに渡す算術演算は、その結果をそれぞれ 24 または 53 の上位ビットに丸めます。ほとんどのプログラムは少なくとも同程度に正確な結果を生成しますが、拡張の丸め精度が使用されている場合、IEEE 演算のセマンティクスへの厳格な遵守が必要な一部のプログラムは拡張の丸め精度モードでは正しく機能しないため、必要に応じて、単精度または倍精度に設定された丸め精度で実行する必要があります。
丸め精度は、SPARC プロセッサを使用したシステム上では設定できません。これらのシステムでは、mode = precision で ieee_flags を呼び出しても計算には影響を与えません。
最後に、mode が exception である場合は、指定されたアクションが現在の IEEE 例外フラグに適用されます。ieee_flags を使用して IEEE 例外フラグを検査したり、制御したりする方法の詳細は、Chapter 4, 例外と例外処理を参照してください。