数値組み込み関数

組み込み関数は、英数字、DBCS、数値、ブール、または日時の値を戻します。

数値組み込み関数は、以下のとおりです。

数字関数の種類

数字関数は次のカテゴリーにクラス分けされます。

整数
整数を戻すもの。
浮動小数点
長精度浮動小数点値を戻すもの。
引き数依存
リターン・タイプは指定する引き数によって異なります。

表 8 に、ILE COBOL で使用可能なこれらのカテゴリーの数字関数のリストを示します。

表 8. 数字関数が戻すデータの型
整数 浮動小数点 引き数依存
DATE-OF-INTEGER ACOS MAX *
DATE-TO-YYYYMMDD ANNUITY MIN *
DAY-OF-INTEGER ASIN RANGE
DAY-TO-YYYYDDD ATAN SUM
EXTRACT-DATE-TIME COS
FACTORIAL LOG
FIND-DURATION LOG10
INTEGER MEAN
INTEGER-OF-DATE MEDIAN
INTEGER-OF-DAY MIDRANGE
INTEGER-PART NUMVAL
LENGTH NUMVAL-C
MOD PRESENT-VALUE
ORD RANDOM
ORD-MAX REM
ORD-MIN SIN
YEAR-TO-YYYY SQRT
STANDARD-DEVIATION
TAN
VARIANCE
注:
* MAX および MIN は英数字にすることができます。

関数のネストと演算式

数字関数はネスト可能です。ある関数を別の関数の引き数として参照できます。 ネストされた関数は、外部関数とは別に評価されます。

数字関数と演算式では構文に関する状況がよく似ているので、 演算式を数字関数の引き数としてネストすることもできます。

COMPUTE X = FUNCTION MEAN (A, B, C / D).

この例では、関数引き数は A、B、および演算式 (C / D) の 3 つだけです。

ALL 添え字と特殊レジスター

組み込み関数の便利な機能として、このほかに ALL 添え字と特殊レジスターの 2 つがあります。

ALL 添え字を使用すれば、ある配列の全エレメントを関数引き数として参照できます。 この機能はテーブルで使用します。

整数タイプの特殊レジスターは、整数引き数を使用できるところでは引き数としてどこでも使用できます。

組み込み関数の例

組み込み関数を使用することにより、以下の表に示されている各種の演算を実行できます。

表 9. 数字関数が処理する演算のタイプ
数値処理 日付 / 時刻 金融 数学 統計
LENGTH
MAX
MIN
NUMVAL
NUMVAL-C
ORD-MAX
ORD-MIN
CURRENT-DATE
DATE-OF-INTEGER
DAY-TO-YYYYDDD
DATE-TO-YYYYMM
DD
DAY-OF-INTEGER
EXTRACT-DATE-
TIME
FIND-DURATION
INTEGER-OF-DATE
INTEGER-OF-DAY
WHEN-COMPILED
YEAR-TO-YYYY
ANNUITY
PRESENT
-VALUE
ACOS
ASIN
ATAN
COS
FACTORIAL
INTEGER
INTEGER-PART
LOG
LOG10
MOD
REM
SIN
SQRT
SUM
TAN
MEAN
MEDIAN
MIDRANGE
RANDOM
RANGE
STANDARD
-DEVIATION
VARIANCE

次の例と説明で、上記の表に示されている各カテゴリーの組み込み関数を示します。

一般的な数値処理

3 つの価格の平均値 (ドル記号の付いた英数字項目として表示) を調べたい場合、 その値を出力レコードの数字フィールドに入れ、出力レコードの長さを調べます。 それには、NUMVAL-C (英数字ストリングの数値の値を戻す関数) と MEAN 関数を使用できます。

01 X                 PIC 9(2).
01 PRICE1            PIC X(8)     VALUE "$8000".
01 PRICE2            PIC X(8)     VALUE "$4000".
01 PRICE3            PIC X(8)     VALUE "$6000".
01 OUTPUT-RECORD.
   05 PRODUCT-NAME   PIC X(20).
   05 PRODUCT-NUMBER PIC 9(9).
   05 PRODUCT-PRICE  PIC 9(6).
.
.
.
PROCEDURE DIVISION.
   COMPUTE PRODUCT-PRICE =
       FUNCTION MEAN (FUNCTION NUMVAL-C(PRICE1)
                      FUNCTION NUMVAL-C(PRICE2)
                      FUNCTION NUMVAL-C(PRICE3)).
       COMPUTE X = FUNCTION LENGTH(OUTPUT-RECORD).

さらに、PRODUCT-NAME の内容を大文字にするため、次のようなステートメントを使用できます。

    
    MOVE FUNCTION UPPER-CASE(PRODUCT-NAME) TO PRODUCT-NAME.
日付および時刻

次の例は、90 日後の期限を計算する方法を示しています。 CURRENT-DATE 関数が戻す最初の 8 文字は、4 桁の年、2 桁の月、そして 2 桁の日付の形式 (YYYYMMDD) を表しています。 この例では、その日付をその整数値に変換します。 その後、その値に 90 を加えます。 整数が YYYYMMDD 形式に再び変換されます。

01 YYYYMMDD              PIC 9(8).
01 INTEGER-FORM          PIC S9(9).
   .
   .
   .
   MOVE FUNCTION CURRENT-DATE(1:8) TO YYYYMMDD.
   COMPUTE INTEGER-FORM = FUNCTION INTEGER-OF-DATE(YYYYMMDD).
   ADD 90 TO INTEGER-FORM.
   COMPUTE YYYYMMDD = FUNCTION DATE-OF-INTEGER(INTEGER-FORM).
   DISPLAY 'Due Date: ' YYYYMMDD.                                       

満期日をカテゴリー日時データ項目として計算することもできます。 このタイプの計算の例については 満期日の計算の例を参照してください。

金融

事業投資の判断を行うためには、将来見込まれる現金流入の現在の値を計算して、 計画中の投資のもうけを見積もらなければならない場合がしばしばあります。 金額の現在値とは、その日の値のことです。 将来の特定の時に受け取ることが期待できる額の現在値は、 その日に投資して、一定の利率で蓄積されて達する将来の額のことです。

たとえば、$1,000 投資すると今後 3 年間に $100、$200、$300 というように毎年支払いを受けるものとします。 次の ILE COBOL ステートメントは、 このような現金流入の現在値の計算方法を示しています (利率を 10% とします)。

01 SERIES-AMT1               PIC 9(9)V99     VALUE 100.
01 SERIES-AMT2               PIC 9(9)V99     VALUE 200.
01 SERIES-AMT3               PIC 9(9)V99     VALUE 300.
01 DISCOUNT-RATE             PIC S9(2)V9(6)  VALUE .10.
01 TODAYS-VALUE              PIC 9(9)V99.
.
.
.
COMPUTE TODAYS-VALUE =
FUNCTION
PRESENT-VALUE(DISCOUNT-RATE SERIES-AMT1 SERIES-AMT2
SERIES-AMT3).

ANNUITY 関数は、融資の元利を返済するための分割払い額を決めなければならないような事業上の問題に使用できます。 支払いは、毎期同額、毎期同期間、毎期同利率を特徴としています。 次の例は、$15,000 の融資を 3 年 (36 カ月) で返済するのに必要な月額の計算方法です (年利 12%、月利 = .12/12 とします)。

01 LOAN                PIC 9(9)V99.
01 PAYMENT             PIC 9(9)V99.
01 INTEREST            PIC 9(9)V99.
01 NUMBER-PERIODS      PIC 99.
.
.
.
COMPUTE LOAN = 15000.
COMPUTE INTEREST = .12
COMPUTE NUMBER-PERIODS = 36.
COMPUTE PAYMENT =
LOAN * FUNCTION ANNUITY((INTEREST / 12) NUMBER-PERIODS).
数学

次の ILE COBOL ステートメントは、組み込み関数のネスト方法、引き数を演算式にする方法、 および従来複雑だった数学計算を簡単に行う方法を示しています。

COMPUTE Z = FUNCTION LOG(FUNCTION SQRT (2 * X + 1))
+ FUNCTION REM(X 2)

ここで、X を 2 で割った剰余は、REMAINDER 文節を使用する DIVIDE ステートメントではなく、組み込み関数を使用して求めています。

統計

組み込み関数を使用すると、データに関する統計情報の計算も容易になります。 さまざまな市民税を計算して、 平均、中間、および範囲 (最大額と最少額の差) を出したい場合、 次のようにします。

O1 TAX-S               PIC 99V999 VALUE .045.
01 TAX-T               PIC 99V999 VALUE .02.
01 TAX-W               PIC 99V999 VALUE .035.
01 TAX-B               PIC 99V999 VALUE .03.
01 AVE-TAX             PIC 99V999.
01 MEAN-TAX            PIC 99V999.
01 TAX-RANGE           PIC 99V999.
   .
   .
   .
COMPUTE AVE-TAX = FUNCTION MEAN(TAX-S TAX-W TAX-B)
COMPUTE MEDIAN-TAX = FUNCTION MEDIAN(TAX-S TAX-W TAX-B)
COMPUTE TAX-RANGE = FUNCTION RANGE(TAX-S TAX-W TAX-B)