変更内容
以下の条件を満たす算術文がある場合、V10.1.0とV10.2.0以降で演算結果が異なります。
加算または減算の二項演算の算術文である。かつ、
結果の一意名の数は、1つのみである。かつ、
[NOT] ON SIZE ERRORの指定がない。かつ、
ROUNDED指定がない。かつ、
2つの作用対象のどちらもが、全桁数が16桁から18桁の外部10進項目である。かつ、
二項演算の中間結果(注)の精度が17桁から19桁である。かつ、
2つの作用対象のどちらかの内部表現が外部10進項目として誤っている。
注 : 中間結果の精度については、“COBOL文法書”の“D.2 四則演算の中間結果”を参照してください。
例
WORKING-STORAGE SECTION. 01 DATA-ZONE1 PIC S9(18). 01 DATA-ZONE2 PIC S9(18). 01 DATA-2 REDEFINES DATA-ZONE2 PIC X(18). 01 DATA-ZONE3 PIC S9(18). 01 DATA-3 REDEFINES DATA-ZONE3 PIC X(18). PROCEDURE DIVISION. MOVE X"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" TO DATA-2 DATA-3 ・・・ ア COMPUTE DATA-ZONE1 = DATA-ZONE2 + DATA-ZONE3 DISPLAY DATA-ZONE1
上記のプログラムでは、外部10進項目に英数字項目の記憶領域を割り当てます。'ア'の転記を実行すると、DATA-ZONE2とDATA-ZONE3には外部10進項目として誤った内部表現(0xFFFF...FFFF)が設定されます。
V10.1.0の結果
+333333333333333330
V10.2.0以降の結果
+545555555455555554
対処方法
外部10進項目として誤った内部表現が設定されている作用対象を含む算術文の結果は規定されていません。誤った内部表現を設定している箇所を修正してください。
外部10進項目の正しい内部表現の概要は次の通りです。
データ項目 | ゾーン部 | 数字部 | 符号部 |
---|---|---|---|
外部10進(SEPARATEあり) | 3 | 0~9 | 2B,2D |
外部10進(SEPARATEなし) | 3 | 4,5 |
参照
“COBOL文法書”の“5.4.17 USAGE句”
“NetCOBOL 入門ガイド”の“5.8 数字項目の標準規則”