Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

DECIMAL

DECIMAL オプションは、特定の FIXED DECIMAL 演算および代入をコンパイラー が処理する方法を指定します。

構文図を読む構文図をスキップする               .-,--------------------.
               V   .-FOFLONASGN---.   |
>>-DECIMAL--(----+-+-NOFOFLONASGN-+-+-+--)---------------------><
                 | .-NOFOFLONMULT-. |
                 +-+-FOFLONMULT---+-+
                 | .-NOFORCEDSIGN-. |
                 '-+-FORCEDSIGN---+-'
 

FOFLONASGN
FOFLONASGN オプションでは、FIXEDOVERFLOW 条件が使用可能で SIZE 条件が使用不可である場合 、コンパイラーは、FIXED DECIMAL 式が FIXED DECIMAL ターゲットに代入されて有効数字 が失われたときに、常に FIXEDOVERFLOW 条件を発生するコードを生成する必要があります。

反対に、NOFOFLONASGN オプションを指定すると、コンパイラーは、このような代入で有効数字 が失われたときに FIXEDOVERFLOW 条件を発生しないコードを生成します。

したがって、例えば FIXED DEC(5) と宣言された変数 A があるとした場合、 代入 A = A + 1 は、FOFLONASGN オプションでは FOFL が発生しますが、NOFOFLONASGN オプションでは発生しません。

ただし、NOFOFLONASGN オプションを指定すると、LIMITS オプションの FIXEDDEC サブオプションで許可されるよりも桁数が多くなる結果を生成する演算によって、FIXEDOVERFLOW 条件が発生する可能性があることに注意してください。 例えば、値 999_999_999_999_999 を持つ FIXED DEC(15) と宣言された変数 B があり、LIMITS の FIXEDDEC サブオプションで最大精度を 15 と指定しているものとした 場合、代入 B = B + 1 は、FIXEDOVERFLOW 条件 (もちろん、FOFL が使用可能な場合) を発生させます。これは、加算 B + 1 がこの条件を発生させるためです。

FOFLONMULT
FOFLONMULT オプションは、組み込み関数で指定された精度としては大きすぎる FIXED DEC の結果を生成する MULTIPLY 組み込み関数が使用されている場合に、 FIXEDOVERFLOW 条件を発生させるコードを、コンパイラーが生成するように要求します。

逆に、NOFOFLONMULT オプションでは、コンパイラーは、そのような MULTIPLY 組み込み関数が使用されている場合に切り捨てた結果を生成するコードを生成します。

なお、FOFLONMULT オプションを使用すると、デフォルト言語のセマンティクスが変更されます (このため、SIZE 条件が有効にされていない限り、FIXED DEC に適用された MULTIPLY 組み込み関数の大きすぎる結果は切り捨てられます)。

FORCEDSIGN
FORCEDSIGN オプションは、値ゼロの FIXED DECIMAL 結果が生成された場合に、結果の符号ニブル が常に値 ’C’X を持つようにするために、追加のコードを生成するようコンパイラーに強制します。 このオプションを指定すると、コンパイラーが生成するコードは、NOFORCEDSIGN サブオプション で生成されるコードよりもパフォーマンスが大幅に低下します。

また、このオプションが有効であると、プログラムを実行するときに、データ例外 がより発生しやすくなります。 例えば、1 つの FIXED DEC(5) 変数を別の FIXED DEC(5) 変数に代入する場合、通常、コンパイラーは 移動を実行するために MVC 命令を生成します。 しかし、このオプションが有効であると、結果に好みの符合が付くようにするために、 コンパイラーは移動を実行するために ZAP 命令を生成します。 ソースに無効なパック 10 進データが含まれていると、MVC 命令ではなく、ZAP 命令が 10 進データ例外 を発生させます。

このオプションを使用すると、ある PICTURE 変数が別の PICTURE 変数に代入される場合も、データ例外が発生することがあります。この変換では通常、FIXED DEC への暗黙的変換が行われますが、このオプションが使用されていると、この変換で ZAP 命令が生成され、ソースに無効なデータが含まれていると、この命令がデータ例外を発生させるからです。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)