DECIMAL オプションは、特定の FIXED DECIMAL 演算および代入をコンパイラー が処理する方法を指定します。
.-,--------------------. V .-FOFLONASGN---. | >>-DECIMAL--(----+-+-NOFOFLONASGN-+-+-+--)--------------------->< | .-NOFOFLONMULT-. | +-+-FOFLONMULT---+-+ | .-NOFORCEDSIGN-. | '-+-FORCEDSIGN---+-'
反対に、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 がこの条件を発生させるためです。
逆に、NOFOFLONMULT オプションでは、コンパイラーは、そのような MULTIPLY 組み込み関数が使用されている場合に切り捨てた結果を生成するコードを生成します。
なお、FOFLONMULT オプションを使用すると、デフォルト言語のセマンティクスが変更されます (このため、SIZE 条件が有効にされていない限り、FIXED DEC に適用された MULTIPLY 組み込み関数の大きすぎる結果は切り捨てられます)。
また、このオプションが有効であると、プログラムを実行するときに、データ例外 がより発生しやすくなります。 例えば、1 つの FIXED DEC(5) 変数を別の FIXED DEC(5) 変数に代入する場合、通常、コンパイラーは 移動を実行するために MVC 命令を生成します。 しかし、このオプションが有効であると、結果に好みの符合が付くようにするために、 コンパイラーは移動を実行するために ZAP 命令を生成します。 ソースに無効なパック 10 進データが含まれていると、MVC 命令ではなく、ZAP 命令が 10 進データ例外 を発生させます。
このオプションを使用すると、ある PICTURE 変数が別の PICTURE 変数に代入される場合も、データ例外が発生することがあります。この変換では通常、FIXED DEC への暗黙的変換が行われますが、このオプションが使用されていると、この変換で ZAP 命令が生成され、ソースに無効なデータが含まれていると、この命令がデータ例外を発生させるからです。