このドキュメントでは、次のトピックについて説明します。
関連ステートメント:ADD | COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | RESET | SEPARATE | SUBTRACT
関連機能グループ:「算術演算とデータ移動操作」
MULTIPLY
ステートメントは、2 つのオペランドを乗算するために使用します。 使用される構文に応じて、乗算結果は operand1 または operand3 に入ります。
データベースフィールドを結果フィールドとして使用するとき、MULTIPLY 演算は、プログラム内で使用したフィールドの内部値だけを更新します。 データベース内のフィールドの値は変更されないまま維持されます。
配列を含む乗算については、『プログラミングガイド』の「算術演算の規則」、「配列での算術演算」も参照してください。
このステートメントには、2 つの異なる構造が可能です。
構文 1 が使用される場合、乗算の結果は operand1 に入ります。
MULTIPLY [ROUNDED ] operand1 BY operand2 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル(構文 1):
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | S | A | M | N | P | I | F | 可 | 不可 | ||||||||||
operand2 | C | S | A | N | N | P | I | F | 可 | 不可 |
構文要素の説明(構文 1)
operand1 BY operand2 |
operand1 は被乗数、operand2 は乗数です。 <oper1> := <oper1> * <oper2> |
---|---|
ROUNDED | キーワード ROUNDED を指定すると、値は operand1 または operand3 に割り当てられる前に切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。
|
構文 2 が使用される場合、乗算の結果は operand3 に入ります。
MULTIPLY [ROUNDED ] operand1 BY operand2 GIVING operand3 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル(構文 2):
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | M | N | P | I | F | 可 | 不可 | ||||||||||
operand2 | C | S | A | N | N | P | I | F | 可 | 不可 | ||||||||||
operand3 | S | A | M | A | U | N | P | I | F | B* | T | 可 | 可 |
*operand3 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明(構文 2)
operand1 BY operand2 GIVING operand3 |
operand1 は被乗数、operand2 は乗数です。 <oper3> := <oper1> * <oper2> operand1 が数値定数の場合は、 |
---|---|
ROUNDED | キーワード ROUNDED を指定すると、値は operand1 または operand3 に割り当てられる前に切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。
|
** Example 'MULEX1': MULTIPLY ************************************************************************ DEFINE DATA LOCAL 1 #A (N3) INIT <20> 1 #B (N5) 1 #C (N3.1) 1 #D (N2) 1 #ARRAY1 (N5/1:4,1:4) INIT (2,*) <5> 1 #ARRAY2 (N5/1:4,1:4) INIT (4,*) <10> END-DEFINE * MULTIPLY #A BY 3 WRITE NOTITLE 'MULTIPLY #A BY 3' 25X '=' #A * MULTIPLY #A BY 3 GIVING #B WRITE 'MULTIPLY #A BY 3 GIVING #B' 15X '=' #B * MULTIPLY ROUNDED 3 BY 3.5 GIVING #C WRITE 'MULTIPLY ROUNDED 3 BY 3.5 GIVING #C' 6X '=' #C * MULTIPLY 3 BY -4 GIVING #D WRITE 'MULTIPLY 3 BY -4 GIVING #D' 14X '=' #D * MULTIPLY -3 BY -4 GIVING #D WRITE 'MULTIPLY -3 BY -4 GIVING #D' 14X '=' #D * MULTIPLY 3 BY 0 GIVING #D WRITE 'MULTIPLY 3 BY 0 GIVING #D' 14X '=' #D * WRITE / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*) MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*) WRITE / 'MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)' / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*) * END
MULTIPLY #A BY 3 #A: 60 MULTIPLY #A BY 3 GIVING #B #B: 180 MULTIPLY ROUNDED 3 BY 3.5 GIVING #C #C: 10.5 MULTIPLY 3 BY -4 GIVING #D #D: -12 MULTIPLY -3 BY -4 GIVING #D #D: 12 MULTIPLY 3 BY 0 GIVING #D #D: 0 #ARRAY1: 5 5 5 5 #ARRAY2: 10 10 10 10 MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*) #ARRAY1: 50 50 50 50 #ARRAY2: 10 10 10 10