DIVIDE

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

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

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


関数

DIVIDE ステートメントは、2 つのオペランドを除算するために使用します。

注意:
ゼロによる除算に関する注意事項:ゼロになっている除数(operand1)を使用しようとすると、エラーメッセージまたは結果としてゼロが返されます。いずれが返されるかは、セッションパラメータ ZD の設定によって決まります(詳細については、『パラメータリファレンス』ドキュメントを参照)。

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

DIVIDE [ROUNDED]

../graphics/cbo2.gif

arithmetic-expression
operand1

../graphics/cbc2.gif

INTO operand2

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

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

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

構文要素の説明:

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

operand1 は除数で、operand2 は被除数です。結果は operand2(結果フィールド)に格納されるため、ステートメントは次の式と同等になります。

operand2 := operand2 / operand1

arithmetic-expression を使用する場合、operand2 は配列指定であってはいけません。

除算の結果の小数点位置は、結果フィールド(つまり、operand2)から計算されます。

結果の精度については、『プログラミングガイド』の「演算割り当てのルール」、「算術演算結果の精度」を参照してください。

ROUNDED
ROUNDED オプション:

キーワード ROUNDED を指定すると、結果は四捨五入されます。

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

構文 2 - DIVIDE(GIVING 節を含む場合)

DIVIDE [ROUNDED]

../graphics/cbo2.gif

arithmetic-expression
operand1

../graphics/cbc2.gif

INTO

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

GIVINGoperand3

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

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

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

* operand3 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

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

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

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

operand3 := operand2 / operand1

除算の結果の小数点位置は、結果フィールド(つまり、operand3)から計算されます。

結果の精度については、『プログラミングガイド』の「演算割り当てのルール」、「算術演算結果の精度」を参照してください。

ROUNDED
ROUNDED オプション:

キーワード ROUNDED を指定すると、結果は四捨五入されます。

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

構文 3 - DIVIDE(REMAINDER 節を含む場合)

DIVIDE

../graphics/cbo2.gif

arithmetic-expression
operand1

../graphics/cbc2.gif

INTO

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

[GIVINGoperand3] REMAINDERoperand4

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

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

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

* operand3 および operand4 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

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

operand1
operand2

オペランド:

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

GIVING 節を使用しない場合は、operand2 に結果が格納されます。

operand2 が定数または変更不可の Natural システム変数の場合は、GIVING 節が必要です。

GIVINGoperand3
GIVING 節:

この節を使用すると、operand2 は変更されず、operand3 に結果が格納されます。

除算結果の小数桁数は、結果フィールド(つまり GIVING 節を使用していない場合は operand2GIVING 節を使用している場合は operand3)で評価されます。

結果の精度については、『プログラミングガイド』の「演算割り当てのルール」、「算術演算結果の精度」を参照してください。

REMAINDERoperand4
REMAINDER 節:

除算の剰余は、operand4 で指定されたフィールドに格納されます。

  • GIVING 節を使用する場合、等価なステートメントは次のようになります。

    operand3 := operand2 / operand1
    operand4 := operand2 - (operand3 * operand1)

    4 つのオペランドのいずれにも配列範囲を使用することはできません。

  • GIVING 節を使用する場合、等価なステートメントは次のようになります。

    temporary := operand2
    operand2 := operand2 / operand1
    operand4 := temporary - (operand2 * operand1)

    ここで、temporaryoperand2 と同じ形式/長さの一時フィールドです。

これらの各ステップにおいて、「算術演算結果の精度」(『プログラミングガイド』)で説明されている規則が適用されます。

** Example 'DIVEX1': DIVIDE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (N7) INIT <20>                                                     
1 #B (N7)                                                               
1 #C (N3.2)                                                             
1 #D (N1)                                                               
1 #E (N1) INIT <3>                                                      
1 #F (N1)                                                               
END-DEFINE                                                              
*                                                                       
DIVIDE 5 INTO #A                                                      
WRITE NOTITLE 'DIVIDE 5 INTO #A' 20X '=' #A                             
*                                                                       
RESET INITIAL #A                                                        
DIVIDE 5 INTO #A GIVING #B                                          
WRITE 'DIVIDE 5 INTO #A GIVING #B' 10X '=' #B                           
*                                                                       
DIVIDE 3 INTO 3.10 GIVING #C
WRITE 'DIVIDE 3 INTO 3.10 GIVING #C' 8X '=' #C        
*                                                     
DIVIDE 3 INTO 3.1 GIVING #D                     
WRITE 'DIVIDE 3 INTO 3.1 GIVING #D' 9X '=' #D         
*                                                     
DIVIDE 2 INTO #E REMAINDER #F                    
WRITE 'DIVIDE 2 INTO #E REMAINDER #F' 7X '=' #E '=' #F
*                                                     
END

プログラム DIVEX1 の出力:

DIVIDE 5 INTO #A                    #A:        4 
DIVIDE 5 INTO #A GIVING #B          #B:        4 
DIVIDE 3 INTO 3.10 GIVING #C        #C:    1.03  
DIVIDE 3 INTO 3.1 GIVING #D         #D:  1       
DIVIDE 2 INTO #E REMAINDER #F       #E:  1 #F:  1