COBOL2002 言語 拡張仕様編


6.8.1 文に共通な指定と規則(浮動小数点形式データを扱う機能)

〈この項の構成〉

(1) 算術式

算術式で,数字項目が書けるところならば,どこにでも浮動小数点項目や浮動小数点数字定数を指定できる。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「4.7.1 算術式(Arithmetic expressions)

(2) 条件式

(a) 比較条件

比較条件に浮動小数点形式データを指定できる。その比較方法は,一般の数字項目の場合に準ずる。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「4.7.4 条件式(Conditional expressions)

作用対象の組み合わせの可否および比較方法を「表6‒3 作用対象の組み合わせによる比較方法」に示す。

(b) 条件名条件

条件名条件に内部,または外部浮動小数点項目に関連づけられた条件名を指定できる。

(c) 字類条件

字類条件には,浮動小数点項目を指定できない。

表6‒3 作用対象の組み合わせによる比較方法

左辺(右辺)

右辺(左辺)

外部浮動

小数点項目

内部浮動

小数点項目

集団項目

A

A

英字項目

×

英数字項目

×

英数字編集項目

×

数字編集項目

×

表意定数(ZERO除く)

×

表意定数(ZERO)

N

N

英数字定数

×

数字定数

N

N

外部10進項目

N

N

内部10進項目

N

N

2進項目

N

N

外部浮動小数点項目

N

N

内部浮動小数点項目

N

N

(凡例)

A:文字作用対象として比較

N:数字作用対象として比較

△:書いてもよいが一般に互換性がないので使用しない方がよい。

  比較する場合は,文字作用対象として比較する。

×:組み合わせが不可能

指標データ項目,ブール項目,オブジェクト参照データ項目,強く型付けされた集団項目との比較はできない。

(3) ROUNDED指定

算術文で結果を受け入れる項目が,内部,または外部浮動小数点数字項目のときには,その項目に対してROUNDED指定を書いてはならない。

(4) ON SIZE ERROR/NOT ON SIZE ERROR指定

除算およびべき乗を含まない算術文で結果を受け入れる項目が,内部,または外部浮動小数点数字項目のときは,ON SIZE ERROR指定やNOT ON SIZE ERROR指定を書いてはならない。

(5) 演算の中間結果についての注意事項

浮動小数点項目や浮動小数点数字定数が算術演算の対象に指定されている場合は,浮動小数点演算が行われる。この場合には中間結果のデータ項目は適用されない。ただし,浮動小数点項目を作用対象に持つ算術演算で浮動小数点項目が受け取りデータ項目としてだけ指定された場合,算術演算は浮動小数点演算とはならない。

演算の中間結果についてはマニュアル「COBOL2002 ユーザーズガイド」またはマニュアル「COBOL2002 使用の手引 手引編」を参照のこと。

(6) けたあふれ条件についての注意事項

(a) 算術文の結果の絶対値が無限大(Infinity)の場合

関連する結果のデータ項目が浮動小数点項目以外のとき,けたあふれ条件が発生する。

(b) 算術文の結果の絶対値が非数(Not-a-Number)の場合

けたあふれ条件は発生しない。

(7) 浮動小数点の丸め制御

浮動小数点数が固定小数点項目で表現できない場合,固定小数点項目で表現可能な数値へ丸められる。丸めをする際の方法(丸めモード)を次の表に示す。例えば,固定小数点項目で表現できない元の浮動小数点数をbとし,固定小数点項目で表現可能な数のうちbの上下で最も近い数をaとc(a,b,cの値はa < b < c の関係にある)とすると,各丸めモードで丸めた結果は次の表のようになる。

表6‒4 丸めモード

丸めモード

丸め処理をした結果

最近値

aとcのうちbに近い方。中間なら偶数の方(結果の最下位が必ず偶数になる)。

切り捨て(0方向)

aとcの絶対値が小さい方。

注記:a < b < c,aとcは連続した表現可能な数,bは表現できない数

COBOLではアーキテクチャで最適な演算命令を使用していて,この命令の丸めモードがシステムによって異なる。このため,システムによって切り捨てまたは最近値の丸めモードに従った動作となり,結果として丸められた値が異なる場合がある。浮動小数点数4.5E0および5.5E0を小数部がない浮動小数点形式以外の数字項目に代入した結果を次の表に示す。

表6‒5 丸めモードにより結果が異なる例

浮動小数点数

丸められた結果

最近値

切り捨て(0方向)

4.5E0

4

4

5.5E0

6

5

なお,システムによって,内部浮動小数点形式データ自体の精度,および丸め制御は異なる(COBOLの仕様ではなく,ハードウェアの浮動小数点形式の演算方法や表現形式の違いによるもの)。このため,丸めモードを合わせたとしても,浮動小数点形式を使用した演算,および転記結果は完全に一致するものではない。

(8) 演算結果や転記結果についての注意事項

無限大(+INF,-INF),非数(NaN),および受け取り側作用対象が格納できる範囲を超える浮動小数点数の値については,演算および転記結果は保証しない。