算術演算
演算子一覧
| [演算] | [一般形式] | [自由形式構文] |
|---|---|---|
| 加算 | 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の時にしか実行されないことを意味しています。