算術演算

演算子一覧

[演算] [一般形式] [自由形式構文]
加算 ADD +
除算 DIV / 又は %DIV
除算の余剰 MVR %REM
乗算 MULT *
平方根 SQRT %SQRT
減算 SUB -
ゼロ加算 Z-ADD none
ゼロ減算 Z-SUB none

一般形式の構文

[演算命令] [演算項目1] [演算項目2] [結果] [標識(Hi/Lo/Eq)]
ADD(H) 加数 加数 +   -   Z
DIV(H) 被除数 除数 +   -   Z
MVR 剰余 +   -   Z
MULT(H) 被乗数 乗数 +   -   Z
SQRT(H) 平方根 +   -   Z
SUB(H) 被減数 減数 +   -   Z
Z-ADD(H) 加数 +   -   Z
Z-SUB(H) 減数 +   -   Z

(H)は四捨五入を指定します。例 ADDH/MULTH...
(H)を指定しない場合、結果フィールド未満の桁は切捨てられます。

標識について

Hi/Lo/Eqに指定している全ての標識は演算直前に*OFFセットされ、演算結果に応じた標識が*ONセットされる。
その為、演算前に標識の*OFFセットを定義する必要はない。

組込関数の構文

%DIV ( 被除数 : 除数)

%DIV(n:m)は、オペランド n を m で除算した結果求められる商の整数部分を戻します。
これらの2つのオペランドは、小数点以下の桁数がない(ゼロの)数値でなければなりません。いずれかのオペランドがパック数値、ゾーン数値、または 2 進数値である場合、結果 はパック数値になります。いずれかのオペランドが整数値である場合、結果は整数になります。これ以外の場合、結果は符号なし数値になります。浮動数値オペランドは使用できません。

これらのオペランドが、8バイト整数フィールド、または符号なしフィールド内に収められる定数である場合、定数の折り畳みがこの組み込み関数に適用されます。この場合、%DIV 組み込み関数は定義仕様書でコーディングできます。

%REM ( 被除数 : 除数)

%REM(n:m)は、オペランド n を m で除算した結果求められる剰余を戻します。これらの2つの オペランドは、小数点以下の桁数がない (ゼロの) 数値でなければなりません。いずれかのオペランドがパック数値、ゾーン数値、または 2 進数値である場合、結果 はパック数値になります。いずれかのオペランドが整数値である場合、結果は整数になります。これ以外の場合、結果は符号なし数値になります。浮動数値オペランドは使用できません。結果には、被除数と同じ符号が付きます。

%REMと%DIVには、次の関係があります。
%REM(A:B) = A - (%DIV(A:B) * B)
これらのオペランドが、8バイト整数フィールド、または符号なしフィールド 内に収められる定数である場合、定数の折り畳みがこの組み込み関数に適用されます。この場合、%REM 組み込み関数は定義仕様書でコーディングできます。

%SQRT ()

%SQRT指定された数値式の平方根を戻します。オペランドが浮動タイプの場合、結果は浮動タイプになります。それ以外の場合は、結果はパック10進数値になります。パラメーターがゼロより小さい値の場合は、例外 00101 が出されます。

標識を用いた構文例

              
_*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....8.
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D NUM1              3 0 INZ(0)
D
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C          ADD    10      NUM1         010203
C*   //演算結果が10の為、標識は01が*ONになる
C*   //num1=10, *IN01=*ON, *IN02=*OFF, *IN03=*OFF
C
C  02       RESET          NUM1        
C*   //標識2は*OFFの為、NUM1に対してリセットは行われない
C*   //num1=10, *IN01=*ON, *IN02=*OFF, *IN03=*OFF
C
C  01       SUB    10      NUM1         010203
C*   //標識1が*ON の為、NUM1に対して10の減算を行う
C*   //num1=0, *IN01=*OFF, *IN02=*OFF, *IN03=*ON
C
C N03       Z-ADD   99      NUM1        
C*   //標識3が*ON の為、NUM1に対して99の加算は行われない
C*   //num1=0, *IN01=*OFF, *IN02=*OFF, *IN03=*ON
              
            
注意

条件標識に"N"を指定する場合、それは標識が*OFFの時にしか実行されないことを意味しています。