FLOAT オプションは、追加の浮動小数点レジスターの使用、および 10 進浮動小数点をサポートするかどうかを制御します。

.-+---+-------------------------------------.
| '-,-' |
V .-AFP-. |
>>-FLOAT--(----+-+-+-----+--+----------------------+-+-+-+--)--><
| | | .-NOVOLATILE-. | | |
| | '-(--+-VOLATILE---+--)-' | |
| '-NOAFP-----------------------------' |
| .-NODFP-. |
'-+-DFP---+-----------------------------'
- NOAFP
- コンパイラー生成コードは従来式の 4 つの浮動小数点レジスターを
使用します。
- AFP
- コンパイラー生成コードは 16 の浮動小数点レジスターすべてを使用できます。
- VOLATILE
- コンパイラーは、呼び出されたプログラムが FPR8 から FPR15 までのレジスターを保持することは想定しません。
そのためコンパイラーは、これらのレジスターを保護するための追加コードを生成します。
このオプションを指定すると、浮動小数点レジスターが使用されなくても追加コードが生成されるため、パフォーマンスに悪影響を与えることになります。
アプリケーションが浮動小数点をほとんど、またはまったく使用しない場合は、FLOAT(AFP(VOLATILE)) よりも FLOAT(NOAFP) を指定してコンパイルした方が高いパフォーマンスが得られます。
- NOVOLATILE
- コンパイラーは、(z/OS で推奨されているように) 呼び出されたプログラムが FPR8 から FPR15 までのレジスターを保持することを想定します。
このオプションを使用すると最適なコードが生成されます。CICS コードを使用しない場合は、このオプションを強くお勧めします。
ただし、CICS アプリケーションに組み込まれるコードの場合は、このオプションの使用には注意が必要です。
CICS アプリケーションの場合は、次のどちらかの方法でコンパイルします。
- EXEC CICS ステートメントを含むすべてのコードは、FLOAT(AFP(VOLATILE)) を指定してコンパイルします。
- 浮動小数点を使用するすべてのコードは、FLOAT(NOAFP) または FLOAT(AFP(VOLATILE)) を指定してコンパイルします。
CICS アプリケーションの一部として実行されるコードの場合は、FLOAT(AFP(NOVOLATILE)) オプションを使用しないことが、安全でおそらく最も簡単な方法です。
- DFP
- DFP 機能が活用されます。すべての DECIMAL FLOAT データが「z/OS Principles of Operations」マニュアルに記載されている DFP フォーマットで保持され、DECIMAL FLOAT を使用する操作は、同マニュアルに記載されている DFP ハードウェア命令を使用して実行されます。
ARCH オプションは 7 (またはそれ以上) でなければなりません。そうでない場合、このオプションは拒否されます。
- NODFP
- DFP 機能は活用されません。
FLOAT(DFP) を指定すると、
- 拡張 DECIMAL FLOAT の最大精度は 34 (16 進浮動小数点と同様に 33 ではない) になります。
- 短精度 DECIMAL FLOAT の最大精度は 7 (16 進浮動小数点と同様に 6 ではない) になります。
- 次の組み込み関数での DECIMAL FLOAT の値は、すべて適切に変更されます。
- EPSILON
- HUGE
- MAXEXP
- MINEXP
- PLACES
- RADIX
- TINY
- 次の組み込み関数はすべて DECIMAL FLOAT の適切な値を返します (また、人間がはるかに容易に理解できる値を返します。例えば、SUCC(1D0) は 1.000_000_000_000_001 になり、ROUND 関数は小数点以下の桁で丸めます)。
- EXPONENT
- PRED
- ROUND
- SCALE
- SUCC
- 10 進浮動小数点リテラルは、ゼロ以外の数字が小数点の後に続かないように、必要に応じて「右側ユニット表示」に変換された場合、つまり、指数が調整された場合 (例えば、3.1415E0 を 31415E-4 として表示する場合に行われるように)、当該リテラルの精度に対応し
た、正常な値の範囲にある指数を持つ必要があります。この範囲は、MINEXP-1 および MAXEXP-1 の値によって定められます。
特に、以下を適用する必要があります。
- 短精度の浮動小数点の場合、 -95 <= 指数 <= 90
- 長精度の浮動小数点の場合、 -383 <= 指数 <= 369
- 拡張精度の浮動小数点の場合、-6143 <= 指数 <= 6111
- DECIMAL FLOAT が CHARACTER に変換される場合、ストリングは、指数に 4 桁を保持します (対して 16 進浮動小数点の場合は 2 桁使用さ
れます)。
- IEEE および HEXADEC 属性は、FLOAT BIN に適用される場合のみ受け入れられ、DEFAULT(IEEE/HEXADEC) オプションは FLOAT BIN にのみ適用されます。
- 数学的な組み込み関数 (ACOS、COS、SQRT など) は、DECIMAL FLOAT の引数に対応しますが、これらの関数に対する言語環境サポートが不完全であるため、引数を IEEE BINARY FLOAT に変換し、対応する IEEE BINARY FLOAT 数学ルーチンを呼び出してから、この結果をまた DECIMAL FLOAT に変換します。同じ理由で、DECIMAL FLOAT 指数は同様の方法で処理されます。
- DFP を使用する場合は、一方のオペランドが FLOAT DECIMAL で他方がバイナリー (つまり、FIXED BINARY、FLOAT BINARY、または BIT) である場合の演算で生じる変換に留意する必要があります。
そうした演算では、PL/I 言語の規則により、FLOAT DECIMAL オペランドは FLOAT BINARY に変換され、その変換にはライブラリー呼び出しが必要となります。
したがって、例えば、A = A + B; の形の代入で、A が FLOAT DECIMAL で B が FIXED BINARY の場合は、3 つの変換が行われ、そのうち 2 つはライブラリー呼び出しになります。
- A は、ライブラリー呼び出しにより、FLOAT DECIMAL から FLOAT BINARY に変換されます。
- B は、インライン・コードにより、FIXED BINARY から FLOAT BINARY に変換されます。
- A + B の和は、ライブラリー呼び出しにより、 FLOAT BINARY から FLOAT DECIMAL に変換されます。
DECIMAL 組み込み関数は、次の場合に役立ちます。ステートメントが A = A + DEC(B); に変更された場合、ライブラリー呼び出しが除去されます。
ライブラリー呼び出しは、前もって B を FLOAT DECIMAL 一時変数に割り当て、それを A に加算することにより除去できます。
- 組み込み関数 SQRTF では、DECIMAL FLOAT の引数のサポートがありません (マップ先にすることのできるハードウェア命令がないため)。
- DFP は、CAST タイプ付き関数でサポートされません。
|
This information center is powered by Eclipse technology. (http://www.eclipse.org)