ここでは,数字項目のけた拡張機能の注意事項について説明します。
数字項目のけた拡張機能を使用する場合,中間結果で保持するけた数が40けたとなります。そのため,従来の1~18けたの演算であっても,数字項目のけた拡張機能を使用しない場合と演算結果が異なるときがあります。数字項目のけた拡張機能を使用しない場合の演算結果と合わせるときは,別の数字項目を使用して演算を分けてください。
(例)
01 A PIC 9(4) VALUE 0.
01 B PIC 9(2) VALUE 10.
01 C PIC 9(1) VALUE 4.
:
COMPUTE A = (B / C) * 100.
上記のCOMPUTE文は,次のような連続した操作に変換します。なお,tempはこのシステムが用意する中間結果項目です。
B / C → temp
temp * 100 → A
数字項目のけた拡張機能を使用する場合,演算結果は次のようになります。
表27-9 数字項目のけた拡張機能を使用する場合の演算結果
数字項目のけた拡張機能の使用有無 | tempの属性 | tempに設定される(B / C)の値 | temp * 100の値 | Aに設定される値 |
---|---|---|---|---|
使用する | 40けた10進浮動小数点 | 2.500・・・・000 (40けたの数値) | 250.000・・・・000 (40けたの数値) | 250 |
使用しない | 次のけた数の数字項目※ 整数部のけた数:2 小数部のけた数:なし | 2 | 200 | 200 |
数字項目のけた拡張機能を使用する場合の計算結果を,数字項目のけた拡張機能を使用しないときと同じにするには,次のように除算(B/C)の結果を別の数字項目WK1(数字項目のけた拡張機能を使用しない場合のtempの属性と同じけた数で定義)に転記したもので演算します。
01 A PIC 9(4) VALUE 0.
01 B PIC 9(2) VALUE 10.
01 C PIC 9(1) VALUE 4.
01 WK1 PIC 9(2) VALUE 0.
:
COMPUTE WK1 = B / C.
COMPUTE A = WK1 * 100.
内部浮動小数点項目から固定小数点形式の数字項目への転記で,固定小数点形式の数字項目が内部浮動小数点項目の有効けたを超える下位のけたを持つ場合,下位のけたが大きくなるほど,誤差の影響も大きくなります。
内部浮動小数点数の小数点位置合わせに伴う誤差の影響が,けた数の拡張によって現れる例を次に示します。なお,内部浮動小数点数の有効けた数および標準けた寄せ規則については,マニュアル「COBOL2002 言語 拡張仕様編 6. 浮動小数点形式データを扱う機能」を参照してください。
(例)
01 A USAGE COMP-2 VALUE 2.0E+0.
01 B PIC 9(1)V9(14).
01 C PIC 9(1)V9(23).
:
COMPUTE B = A.
COMPUTE C = A.
:
(出力結果)
B = +200000000000000
C = +199999999999999983222784