COBOL2002 ユーザーズガイド


29.5 数字項目のけた拡張機能の注意事項

ここでは,数字項目のけた拡張機能の注意事項について説明します。

〈この節の構成〉

(1) 数字項目のけた拡張機能を使用する場合の演算結果

数字項目のけた拡張機能を使用する場合,中間結果で保持するけた数が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

数字項目のけた拡張機能を使用する場合,演算結果は次のようになります。

表29‒9 数字項目のけた拡張機能を使用する場合の演算結果

数字項目のけた拡張機能の使用有無

tempの属性

tempに設定される(B / C)の値

temp * 100の値

Aに設定される値

使用する

40けた10進浮動小数点

2.500・・・・000

(40けたの数値)

250.000・・・・000

(40けたの数値)

250

使用しない

次のけた数の数字項目

 整数部のけた数:2

 小数部のけた数:なし

2

200

200

注※

数字項目のけた拡張機能を使用しないときの中間結果のけた数は,「5.2.4 演算の中間結果」を参照してください。

数字項目のけた拡張機能を使用する場合の計算結果を,数字項目のけた拡張機能を使用しないときと同じにするには,次のように除算(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.

(2) 内部浮動小数点項目から固定小数点形式の数字項目への転記

内部浮動小数点項目から固定小数点形式の数字項目への転記で,固定小数点形式の数字項目が内部浮動小数点項目の有効けたを超える下位のけたを持つ場合,下位のけたが大きくなるほど,誤差の影響も大きくなります。

内部浮動小数点数の小数点位置合わせに伴う誤差の影響が,けた数の拡張によって現れる例を次に示します。なお,内部浮動小数点数の有効けた数および標準けた寄せ規則については,マニュアル「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