MULTIPLY

このドキュメントでは、次のトピックについて説明します。

関連ステートメント:ADD | COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | RESET | SEPARATE | SUBTRACT

関連機能グループ:算術演算とデータ移動操作


関数

MULTIPLY ステートメントは、2 つのオペランドを乗算するために使用します。使用される構文に応じて、乗算結果は operand1 または operand3 に入ります。

データベースフィールドを結果フィールドとして使用するとき、MULTIPLY 演算は、プログラム内で使用したフィールドの内部値だけを更新します。データベース内のフィールドの値は変更されないまま維持されます。

配列を含む乗算については、『プログラミングガイド』の「算術演算の規則」、「配列での算術演算」も参照してください。

このステートメントには、2 つの異なる構造が可能です。

構文 1 - GIVING 節のない MULTIPLY ステートメント

構文 1 が使用される場合、乗算の結果は operand1 に入ります。

MULTIPLY [ROUNDED] operand1 BY

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S A   M   N P I F               ×
operand2 C S A   N   N P I F               ×

構文要素の説明:

構文要素 説明
arithmetic-expression COMPUTE ステートメントの「算術演算式」も参照してください。
operand1 BY operand2
オペランド:

operand1 は被乗数、operand2 は乗数です。

結果は operand1 に格納されるため、ステートメントは次の式と同等になります。

operand1 := operand1 * operand2
ROUNDED
ROUNDED オプション:

キーワード ROUNDED を指定すると、値は operand1 または operand3 に割り当てられる前に四捨五入されます。

四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。

構文 2 - MULTIPLY ステートメント(GIVING 節を含む場合)

構文 2 が使用される場合、乗算の結果は operand3 に入ります。

MULTIPLY [ROUNDED]

../graphics/cbo2.gif

(arithmetic-expression)
operand1

../graphics/cbc2.gif

BY

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

GIVINGoperand3

構文図で使用されている記号については、「構文記号」を参照してください。

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
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 以下の長さでのみ使用できます。

構文要素の説明:

構文要素 説明
arithmetic-expression COMPUTE ステートメントの「算術演算式」も参照してください。
operand1 BY operand2 GIVING operand3
オペランド:

operand1 は被乗数、operand2 は乗数です。結果は operand3 に格納されるため、ステートメントは次の式と同等になります。

operand3 := operand1 * operand2
ROUNDED
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

プログラム MULEX1 の出力:

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