中間結果の精度の計算
コンパイラーはアルゴリズムを使用して、中間結果用に確保された整数桁および小数桁の数を判別します。
以下に、中間結果用に確保される整数桁および小数桁の数をコンパイラーが判別する方法について説明します。
その中で次の省略語を使用します。
- i
- 中間結果用に確保される整数桁の数。
- d
- 中間結果用に確保される小数桁の数。
- ROUNDED
- ROUNDED オプションを使用する場合、より正確にするために、もう 1 つの整数または小数が、 必要であれば付け加えられることがあります。 最終結果だけが丸められます。中間結果は丸められません。 正確に丸めることができる最大桁数は 62 桁です。
- dmax
- 特定のステートメントの中で、次のうちの最大のもの。
- 最終結果フィールドに必要な小数桁の数。
- 任意のオペランド用に定義された小数桁の最大数。
- 任意の関数オペランドの outer-dmax。
- inner-dmax
- 関数の inner-dmax は次のうちの最大のものです。
- 任意の基本引数用に定義された小数桁の数。
- 任意の算術式引数用の dmax。
- 任意の組み込み関数用の outer-dmax。
- outer-dmax
- 関数結果が、それ自身の評価の外側にある演算に対して、 どのような結果をもたらすかを決定する数 (例えば、 その関数が算術式中のオペランドである、または他の関数への引数である場合)。
- op1
- 生成された算術ステートメントの最初のオペランド。 除算では、op1 は除数です。
- op2
- 生成された算術ステートメントの 2 番目のオペランド。 除算では、op2 は被除数です。
- i1、i2
- op1 と op2 のそれぞれの整数桁の数。
- d1、d2
- op1 または op2 用にそれぞれ定義された小数桁の数。
- ir
- 生成された算術ステートメントまたは演算の処理から得られる中間結果フィールド。 中間結果は、ir1、ir2 等で表されます。 後続の中間結果が同じメモリー・ロケーションを共用することもあります。
COMPUTE ステートメントを使って、算術式での中間結果の使用方法を以下に示します。
この場合、次のステートメントは、
COMPUTE Y = A + B * C - D / E + F ** G
以下のように置き換えられます。
| F ** G | ir1 が生成される | |
| MULTIPLY B | BY C | ir2 が生成される |
| DIVIDE E | INTO D | ir3 が生成される |
| ADD A | TO ir2 | ir4 が生成される |
| SUBTRACT ir3 | FROM ir4 | ir5 が生成される |
| ADD ir5 | TO ir1 | Y が生成される |