算術式(arithmetic expression)には、数字基本項目の一意名、数字定数、これらの一意名や定数を算術演算子でつないだもの、2つの算術式を算術演算子でつないだもの、算術式をかっこで囲んだものがある。算術式の前には単項演算子をつけることができる。
以下の記述における、
算術式の中に現れる一意名および定数は、算術演算を行える数字基本項目または数字定数のどちらかを表わしていなければならない。
算術式に使用できる演算子(arithmetic operator)には、5つの2項演算子(binary arithmetic operator)と、2つの単項演算子(unary arithmetic operator)がある。これらの演算子は特定の記号で表わし、前後を空白で区切る。
2項演算子 |
意味 |
---|---|
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
** | べき乗 |
単項演算子 |
意味 |
---|---|
+ | 数字定数+1を掛けることと同じ |
- | 数字定数-1を掛けることと同じ |
算術式に使用できるビット演算子(bitwise operator)には、4つの2項演算子(binary bitwise operator)と、1つの単項演算子(unary bitwise operator)がある。これらの演算子は特定の予約語で表わし、前後を空白で区切る。
2項ビット演算子 |
意味 |
---|---|
B-AND | 2つのデータ項目のビット単位の論理 AND をとる |
B-OR | 2つのデータ項目のビット単位の論理 OR とる |
B-XOR | 2つのデータ項目のビット単位の排他的 OR とる |
B-EXOR | 2つのデータ項目のビット単位の排他的 OR とる |
単項ビット演算子 |
意味 |
---|---|
B-NOT | データ項目のビット単位の論理 NOT をとる |
B-XOR と B-EXOR は同義語である。
これらの演算子は、COMP-5, COMP-X のデータ項目または数字定数のみから構成される算術式の中でのみ使用することができる。 B-NOT はひとつの被演算子のみを受け付け、その他は2つの被演算子を受け付ける。 演算子の実行結果は、CBL_AND などの論理演算ライブラリ ルーチンを、被演算子データ項目のうち長い方のサイズをもつ一時領域に対して呼び出した結果と同等となる。 短い長さの被演算子は、事前に長い方のサイズを持つ一時領域に転記される。 被演算子のタイプが COMP-5 と COMP-X とで混在している場合、一時領域のタイプは長い方のタイプに揃えられる。このため実行時性能を考慮すればタイプの混在は避けるべきである。
以下に例題プログラムを示す:
data division. working-storage section. 01 n1 pic 9(9). 01 n2 pic xx comp-5. 01 n3 pic xxxx comp-5. procedure division. move 2 to n2 move 4 to n3 compute n1 = n2 b-or n3 *> n1 = 6 if n2 b-and n3 = n2 display 'true' end-if compute n1 = b-not n2 *> n1 = 65533 compute n1 = n2 b-xor n3 + 1 *> n1 = 7 compute n1 = n2 b-and 2 *> n1 = 2
使用可能な変数、数字定数、算術演算子、およびかっこの組み合わせを表 10-1に示す。
最初の要素 | 2番目の要素 | ||||
---|---|---|---|---|---|
変数 | * / ** + - B-AND B-OR B-XOR B-EXOR | 単項 + - B-NOT | ( | ) | |
変数 | - | P | - | - | P |
* / ** + - B-AND B-OR B-XOR B-EXOR | P | - | P | P | - |
単項 + - B-NOT | P | - | - | P | - |
( | P | - | P | P | - |
) | - | P | - | - | P |
P | 許される要素の組合わせを示す |
- | 無効な組合わせを示す |
変数 | 一意名または定数を示す |
算術式には、書き方と評価について、以下の規則が適用される。
1番目 | 単項演算子の+と-, B-NOT |
2番目 | べき乗 |
3番目 | 乗算と除算 |
4番目 | 加算と減算 |
5番目 | B-AND |
6番目 | B-XOR, B-EXOR |
7番目 | B-OR |
以下に式の評価の例を示す。
1 + 2 * 3
上の式では、最初に乗算(下記)が実行される。
次に、乗算の結果、6を使用して加算が実行される。
したがって、式の結果は7となる。
式が評価されると、一つ以上の中間結果が出される。概念的に、各中間結果は、一時データ項目として格納され、その値はARITHMETIC指令で選択したパラメーターによって決まる。
ARITHMETIC"MF"指令を選んだ場合、本 COBOL システムは、各中間結果を十進40桁の浮動小数点レジスタに評価する。ゼロでない各中間結果の最上位桁はこのレジスタの最上位桁に位置付けられる。小数点位置は中間結果の値に応じて浮動する。40桁に格納できない桁は切り捨てられる。
ARITHMETIC"TRUNC20" コンパイラ指令を選択すると、Micro Focus COBOLは、ARITHMETIC"MF"を選択した場合と同じ方法で各中間結果を評価する。ただし、20桁を超える小数点の右側の数字は、式の各段階で切り捨てられる。この指令は、COBOL WorkBenchで提供されるものと同様の切り捨てが必要な場合にのみ使用すべきである。 この指令を使用する場合は、INTLEVELコンパイラ指令の初期値、"2"の設定を変えてはならない。これは、一部の新機能(全部で18桁を超える数字PICUTUREなど)をTRUNC20とともに使用できなくなることを意味する。
OS/VS COBOL, VS COBOL II, DOS/VS COBOL, COBOL/370 および OS/390 システムでは、中間結果を、式中の要素のPICTURE句によって決定される精度で計算するので、各バージョンによって多少異なってくる。詳細については、IBM VS COBOL for OS/VSマニュアル、VS COBOL II Application Programming Guide、およびCOBOL for OS/390 & VM V2R2 Programming Guideを参照。各中間結果は、PICTURE 9(n)V9(m) を持つ。n+m の最大値は、選択されたオプションによって 30 または 31 である。
中間結果用にOSVSまたはVSC2オプションを記述した場合、このシステムは以下の制限で、選択されたメインフレームの動作をその結果を適当に切り捨てて想定する。