デフォルトの精度規則の例

以下の例はデフォルトの精度の規則がどのように働くかを示しています。

図 167. 中間結果の精度
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
D FLD1            S             15P 4
D FLD2            S             15P 2
D FLD3            S              5P 2
D FLD4            S              9P 4
D FLD5            S              9P 4
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
C                   EVAL      FLD1 = FLD2/(((FLD3/100)*FLD4)+FLD5)
                                            (    1   )
                                           (          2    )
                                          (                 3    )
                                    (     4                       )

上記の演算仕様書が処理された場合、FLD1 に割り当てられる結果の値の精度について、小数点以下の桁数は 3 桁 と予期されますが、小数点以下の桁はありません。 これは、最後の評価 (上記の例の  4 ) が行われた時に、演算項目が位取りされる数が負になるため です。この理由を確認するために、式がどのように評価されるかを確認してください。

 1 
FLD3/100 の評価

規則は次のとおりです。

 Lr = 63 
 Dr = max(63-((L1-D1)+D2),0)
    = max(63-((5-2)+0),0)    
    = max(63-3,0)    
    = 60 

 2 
(1 の結果 * FLD4) の評価

規則は次のとおりです。

Lr = min(L1+L2,63)    
   = min(63+9,63)    
   = 63 
Dr = min(D1+D2,63-min((L1-D1)+(L2-D2),63))    
   = min(60+4,63-min((63-60)+(9-4),63))    
   = min(64,63-min(4+5,63)    
   = min(64,55)    
   = 55 
 3 
(2 の結果 + FLD5) の評価

規則は次のとおりです。

T  = min(max(L1-D1,L2-D2)+1,63)    
   = min(max(63-55,9-4)+1,63)    
   = min(max(8,5)+1,63)    
   = min(9,63)    
   = 9 
Dr = min(max(D1,D2),31-T)
   = min(max(55,4),63-9)    
   = min(55,54)    
   = 54 
Lr = T + Dr
   = 9 + 54 = 63 
 4 
FLD2/3 の結果の評価

規則は次のとおりです。

Lr = 63 
Dr = max(63-((L1-D1)+D2),0)    
   = max(63-((15-2)+ 54),0)    
   = max(63-(13+54),0)    
   = max(-4,0)     
****  NEGATIVE NUMBER TO WHICH FACTOR IS SCALED   ****    = 0

この問題を避けるためには、最初の評価が除算ではなく乗算、 すなわち、FLD3 * 0.01 となるように上記の式を変更するか、%DEC 組み込み関数を 使用して、副次式 FLD3/100: %DEC(FLD3/100 : 15 : 4) を 設定するか 命令拡張 (R) を使用して、小数点以下の桁数が決して 4 桁より少なくならない ようにします。