COBOLのCOMPUTE命令とは?複合計算の書き方と使い方を解説

2025年4月9日水曜日

COBOL

COBOLの計算処理でつまずいたなら、COMPUTE命令の「複合計算」がカギかもしれません。

たとえば「A = B + C * D」なんて式、ぱっと見で何が先に計算されるかピンときますか?順番を間違えると、まるでケーキに醤油をかけるようなコードになってしまうかも……。

でもご安心を。この記事では、COBOLのCOMPUTE命令を使った複合計算の基礎から応用までを、やさしくていねいに解説します。初心者でも「なるほど、そういうことか!」と納得できる内容にしています。

読み終えたあとには、こんなことがわかります。

  • COMPUTE命令の基本的な使い方

  • 足し算や掛け算などの計算が、どんな順番で処理されるか

  • 計算の順番を変えたいときに使う括弧のルール

  • 実際のプログラムに応用できるサンプルコードの書き方

COBOLのCOMPUTE命令とは?基本をおさえよう

COBOLで計算するとき、COMPUTE命令はまさに「まとめて計算したいときの便利屋さん」です。

本来、足し算はADD、引き算はSUBTRACT、掛け算はMULTIPLY、割り算はDIVIDEといった専用の命令が用意されています。でも、それぞれバラバラに書くとコードがやたら長くなります。

そこで登場するのがCOMPUTE命令。算数の式のように、一文でまとめて書けるんです。

たとえば「WS-A + WS-B * WS-C」という計算も、COMPUTEを使えば1行で表現できます。しかも読みやすい。

計算式をそのまま書けるから、コードがスッキリしてミスも減らせる。初心者にもやさしくて、ベテランも納得の便利命令なんです。

COBOLのCOMPUTE命令 複合計算の基本的な書き方

COMPUTE命令は、計算した結果を変数に代入するときに使います。

COMPUTE 項目名 = 算術式

たとえば、こんなふうに書きます。

COMPUTE WS-RESULT = WS-A + WS-B * WS-C

この文は、「WS-B と WS-C を掛けて、その結果に WS-A を足す」という意味になります。

各部分の意味をざっくり説明します。

  • WS-RESULT:計算結果を入れる箱(変数)
  • =:代入を意味します
  • WS-A + WS-B * WS-C:計算したい内容(算術式)

変数は事前に定義しておく必要があります。たとえば、PIC句で「WS-RESULT PIC 9(5).」といった形で数字用の箱を作ります。

構文自体はシンプルですが、演算子の順番には注意が必要です。どの計算が先に行われるかで結果が変わってしまいます。

COBOLのCOMPUTE命令 複合計算の演算子の優先順位

複合計算では、演算子の順番(優先順位)がとても大事です。計算の順番を間違えると、意図しない答えになります。

COMPUTE命令では、基本的に数学のルールと同じです。

  • () 括弧:最優先で計算されます
  • **(べき乗):次に計算されます
  • *(掛け算)と /(割り算):その次に計算されます
  • +(足し算)と -(引き算):いちばん最後です

同じ優先順位のものが並んでいる場合は、左から右の順番で計算されます。

たとえば、次のような式を見てみましょう。

COMPUTE WS-RESULT = WS-A + WS-B * WS-C

この式は、「WS-B と WS-C を先に掛けて、その結果に WS-A を足す」という意味になります。

もし「先に足してから掛けたい」と思ったら、括弧を使えばOKです。

COMPUTE WS-RESULT = (WS-A + WS-B) * WS-C

括弧をつけるだけで、計算の順番がガラッと変わるので、使いどころを見極めるのがコツです。

COBOLのCOMPUTE命令 複合計算の使い方(四則演算)

まずは、足し算・引き算・掛け算・割り算を組み合わせた複合計算を、COMPUTE命令で書いてみましょう。

以下のサンプルコードでは、変数WS-AからWS-Eまでを使って計算を行い、結果をWS-RESULTに代入して表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-FOUR-OPERATIONS.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A       PIC 9(3) VALUE 10.
01 WS-B       PIC 9(3) VALUE 5.
01 WS-C       PIC 9(3) VALUE 2.
01 WS-D       PIC 9(3) VALUE 8.
01 WS-E       PIC 9(3) VALUE 4.
01 WS-RESULT  PIC 9(5)V99.

PROCEDURE DIVISION.
   COMPUTE WS-RESULT = WS-A + WS-B * WS-C - WS-D / WS-E
   DISPLAY "計算結果: " WS-RESULT
   STOP RUN.

サンプルコード解説

COMPUTE WS-RESULT = WS-A + WS-B * WS-C - WS-D / WS-E

計算の順番は、数学と同じく演算子の優先順位に従います。順を追って見ていきましょう。

  • 1. WS-B * WS-C を先に計算します(5 × 2 = 10)
  • 2. WS-D / WS-E を計算します(8 ÷ 4 = 2)
  • 3. WS-A + (1の結果) を計算します(10 + 10 = 20)
  • 4. (3の結果) - (2の結果) を計算します(20 - 2 = 18)

最終的に、WS-RESULT には 18 が代入されます。

ちなみに各変数のPICTURE句(PIC)は、桁数を指定しています。Vは小数点を表しており、WS-RESULTだけ少数も扱えるようになっています。

実行結果

計算結果: 18.00

COBOLのCOMPUTE命令 複合計算の使い方(括弧とべき乗)

演算の順番を変えたいときは、括弧( )を使います。さらに、べき乗を表すには「**」を使います。

たとえば、次のような式を書いてみましょう。

IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-PAREN-EXPONENT.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A       PIC 9(3) VALUE 2.
01 WS-B       PIC 9(3) VALUE 3.
01 WS-C       PIC 9(3) VALUE 4.
01 WS-D       PIC 9(3) VALUE 2.
01 WS-RESULT  PIC 9(5)V99.

PROCEDURE DIVISION.
   COMPUTE WS-RESULT = (WS-A + WS-B) * WS-C ** WS-D
   DISPLAY "計算結果: " WS-RESULT
   STOP RUN.

サンプルコード解説

COMPUTE WS-RESULT = (WS-A + WS-B) * WS-C ** WS-D

この式の計算は、順番をしっかり意識するのがポイントです。

  • 1. 括弧内 WS-A + WS-B を計算します(2 + 3 = 5)
  • 2. WS-C ** WS-D を計算します(4 の 2乗 → 4 × 4 = 16)
  • 3. (1の結果) * (2の結果) を計算します(5 × 16 = 80)

COMPUTE命令の中で、括弧は最優先、次に**(べき乗)が計算され、そのあとで掛け算が行われます。

実行結果

計算結果: 80.00

COBOLのCOMPUTE命令 複合計算の注意点

COMPUTE命令を使って複合計算を行うとき、便利なだけにちょっとした落とし穴もあります。

初心者がうっかり見逃しやすいのが、四捨五入(ROUNDED指定)桁あふれ(ON SIZE ERROR指定)です。

それぞれどういうものか、なぜ気をつける必要があるのかを見ていきましょう。

ROUNDED指定(四捨五入)

計算結果に小数点が含まれる場合、ROUNDEDをつけると、指定された桁数に丸めてくれます。

たとえば、次のようなコードを見てみましょう。

COMPUTE WS-RESULT = 10 / 3

この場合、結果は「3.333…」と小数がずっと続きます。でも、変数の定義が「PIC 9(2)V9」など、小数点以下1桁しか入らない場合、どうなると思いますか?

そのままだと「3.3」になってしまいます。けれど、ROUNDEDを使えば「3.3」か「3.4」かを四捨五入で判断してくれます。

COMPUTE WS-RESULT ROUNDED = 10 / 3

こうすることで、計算の精度をきちんと保つことができます。小数点以下を扱う計算では、ROUNDEDをつけるかどうかで結果が変わるので、地味に大事です。

ON SIZE ERROR指定(桁あふれ)

計算結果が変数の上限を超えると、桁あふれ(SIZE ERROR)が起きます。

たとえば、WS-RESULTの定義が「PIC 9(3)」だったとします。そこに「9999」みたいな大きな数字を代入しようとすると、変数のサイズを超えてしまい、とんでもない値になるか、処理が止まってしまうこともあります。

そんな時に使うのが ON SIZE ERROR です。

COMPUTE WS-RESULT = WS-A * WS-B
    ON SIZE ERROR DISPLAY '桁あふれ発生!'

このように書いておくと、もし結果が入りきらなかったときに、代わりにエラーメッセージを表示してくれます。

安全なコードを書くためには欠かせない保険のようなものです。

【まとめ】COBOLのCOMPUTE命令 複合計算をマスターしよう

ここまで紹介してきた内容を、ポイントだけ振り返ってみましょう。

  • COMPUTE命令は、複数の演算をまとめて1行で書ける便利な命令
  • 演算の順番は、数学と同じく「括弧 → べき乗 → 掛け算・割り算 → 足し算・引き算」
  • 括弧( )を使えば、計算順を意図的に変えられる
  • ROUNDEDを使うと、小数点以下をきれいに四捨五入できる
  • ON SIZE ERRORをつければ、桁あふれによるバグを防げる

基本さえ押さえておけば、COMPUTE命令は強力な味方になります。

最初は戸惑うかもしれませんが、使っていくうちにどんどん慣れてきます。コードでいろんな計算を試して、自信をつけていきましょう。

【関連記事】

>> 今さら聞けない「COBOLとは?」

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ