バージョン 4.2.5
 —  ステートメント  —

MULTIPLY

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

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

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


機能

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

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

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

Top of page

構文説明

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

構文 1 - GIVING 節のない MULTIPLY

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

MULTIPLY [ROUNDEDoperand1 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 は乗数です。 GIVING 節が使用されていない場合は、operand1 に結果が入るため、ステートメントは次と同等になります。

<oper1> := <oper1> * <oper2>
ROUNDED キーワード ROUNDED を指定すると、値は operand1 または operand3 に割り当てられる前に切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。

構文 2 - GIVING 節のある MULTIPLY

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

MULTIPLY [ROUNDEDoperand1 BYoperand2 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 は乗数です。 GIVING 節が使用されている場合は、operand1 が変更されず、結果が operand3 に入るため、ステートメントは次と同等になります。

<oper3> := <oper1> * <oper2>

operand1 が数値定数の場合は、GIVING 節が必要です。

ROUNDED キーワード ROUNDED を指定すると、値は operand1 または operand3 に割り当てられる前に切り上げられます。 切り上げについては、『プログラミングガイド』の「演算割り当てのルール」、「フィールドの切り捨てと切り上げ」を参照してください。

Top of page

** 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

Top of page