数値演算の精度の規則

固定形式命令コード (プログラマーが個々の演算の結果を常に指定 しなければならない) の場合とは異なり、RPG が、式の中の各演算の 結果の形式および精度を決定しなければなりません。

演算に、浮動形式、整数形式、または符号なし形式の結果が ある場合、精度はその型式の最大サイズとなります。 整数および符号なし演算は、4 バイト値を生成し、浮動演算は 8 バイト値を 生成します。

ただし、演算にパック 10 進数、ゾーン 10 進数、または 2 進数型式が ある場合、結果の精度はオペランドの精度によって異なります。

10 進演算の精度規則をよく知っておくことは重要です。これは、 比較的単純な式でも、予期しない結果が出る場合があるためです。 たとえば、乗算の 2 つのオペランドの大きさ十分である場合、乗算の結果 の小数位はゼロになります。2 つの 40 桁の数を乗算している場合、その乗算で出される 可能性のあるすべての結果を収容するために、理想的には 80 桁が必要になります。 しかし、RPG は 63 桁までの数値しかサポートしないため、 その結果は 63 桁に調整されます。この場合、結果から最大 17 桁の数字が切り捨てられることになります。

中間結果のサイズを制御するために、次の 2 組の精度規則を使用する ことができます。

  1. デフォルトの規則では、数値のオーバーフローの可能性を最小限に 抑えるために、できるだけ大きい中間結果を出します。 残念ながら、その結果があまりにも大きいと、場合によって小数位のない 結果が出される場合が生じます。
  2. 「結果の小数点以下の桁数」精度規則は、デフォルトの規則と同じ働きを しますが、ステートメントに、数値変数への割り当て、または特定 の 10 進精度への変換が含まれる場合、中間結果の小数点以下の桁数は、 希望する結果の小数位より少なくなることは絶対にない、という点が 異なります。

    実際には、数値式のコーディング時にコンパイル・リストを調べる場合に は、正確な精度について心配する必要はありません。 診断メッセージが、中間結果の小数点以下の桁数が切り捨てられていることを 示します。 式の中に割り当てが含まれている場合、命令コード拡張 (R) を コーディングすることによって、そのステートメントに関して「結果の 小数点以下の桁数」精度規則を使用すると、その小数点以下の桁数を 確保することができます。

    「結果の小数点以下の桁数」精度規則が使用できない場合 (たとえば、 関係式の中などで)、組み込み関数 %DEC を使用して、副次式の結果 を小さい精度に変換し、小数点以下の桁数が失われないように することができます。