コンパイラーは、中間結果における整数および小数点以下の桁数を、決定します。
次の表は、加算、減算、乗算、または除算の結果として理論上可能な精度を示しています。
| 演算 | 整数桁 | 小数桁 |
|---|---|---|
| + または - | (i1 または i2) + 1、どちらか大きい方 | d1 または d2、どちらか大きい方 |
| * | i1 + i2 | d1 + d2 |
| / | i2 + d1 | (d2 - d1) または dmax、どちらか大きい方 |
算術ステートメントのオペランドを十分な小数桁で定義して、最終結果の正確度が希望どおりになるようにしなければなりません。
次の表は、互換モード (つまり、デフォルトのコンパイラー・オプション ARITH(COMPAT) が有効である場合) で加算、減算、乗算、または除算を伴う算術演算の固定小数点中間結果においてコンパイラーが 保持する桁数を示しています。
| i + d の値 | d の値 | i + dmax の値 | ir 用に保持される桁数 |
|---|---|---|---|
| <30 または =30 | 任意の値 | 任意の値 | i 整数桁数および d 小数桁数 |
| >30 | <dmax または =dmax | 任意の値 | 30-d 整数桁数および d 小数桁数 |
| >dmax | <30 または =30 | i 整数桁数および 30-i 小数桁数 | |
| >30 | 30-dmax 整数桁数および dmax 小数桁数 |
次の表は、拡張モード (つまり、コンパイラー・オプション ARITH(EXTEND) が有効である場合) で加算、減算、乗算、または除算を伴う算術演算の固定小数点中間結果においてコンパイラーが 保持する桁数を示しています。
| i + d の値 | d の値 | i + dmax の値 | ir 用に保持される桁数 |
|---|---|---|---|
| <31 または =31 | 任意の値 | 任意の値 | i 整数桁数および d 小数桁数 |
| >31 | <dmax または =dmax | 任意の値 | 31-d 整数桁数および d 小数桁数 |
| >dmax | <31 または =31 | i 整数桁数および 31-i 小数桁数 | |
| >31 | 31-dmax 整数桁数および dmax 小数桁数 |
指数は、式 op1 ** op2 で表されます。 op2 の特性に基づいて、コンパイラーは固定小数点数のべき乗計算を次の 3 つのいずれかの方法で処理します。
d = d1 * |op2|
また、値 i は、op1 の特性に基づいて、次のように計算されます。
i = i1 * |op2|
互換モード (ARITH(COMPAT) を使用してコンパイルする場合) では、コンパイラーは i および d を計算し終えると、次の表に示すアクションを取り、べき乗計算の中間結果 ir を処理します。
| i + d の値 | その他の条件 | 取られるアクション |
|---|---|---|
| <30 | 任意 | ir において、i の整数桁数および d の小数桁数が保持される。 |
| =30 | op1 が奇数の桁数を持つ。 | ir において、i の整数桁数および d の小数桁数が保持される。 |
| op1 が偶数の桁数を持つ。 | op2 が整数データ名または変数である場合と同じアクション (以下を参照)。例外: リテラル 1 の累乗に計算される 30 桁の整数の場合は、ir において、i の整数桁数および d の小数桁数が保持される。 | |
| >30 | 任意 | op2 が整数データ名または変数である場合と同じアクション (以下を参照) |
拡張モード (ARITH(EXTEND) を使用してコンパイルする場合) では、コンパイラーは i および d を計算し終えると、次の表に示すアクションを取り、指数計算の中間結果 ir を処理します。
| i + d の値 | その他の条件 | 取られるアクション |
|---|---|---|
| <31 | 任意 | ir において、i の整数桁数および d の小数桁数が保持される。 |
| =31 または >31 | 任意 | op2 が整数データ名または変数である場合と同じアクション (以下を参照)。例外: リテラル 1 の累乗に計算される 31 桁の整数の場合は、ir において、i の整数桁数および d の小数桁数が保持される。 |
op2 が負である場合は、1 という値が予備計算によって作成された結果で除算されます。使用される i と d の値は、上記に示された固定小数点データの除算規則に従って計算されます。
op2 が 0 であると、結果は 1 になります。0 による除算とべき乗計算の SIZE ERROR 条件が適用されます。
9 桁を超える有効数字を持つ固定小数点の指数部は、常に 9 桁に切り捨てられます。指数がリテラルまたは定数である場合、E レベルのコンパイラー診断メッセージが発行されます。それ以外の場合は、実行時に通知メッセージが発行されます。
関連参照
中間結果用の用語
中間結果での切り捨て
バイナリー・データと中間結果
浮動小数点データと中間結果
固定小数点算術で評価される組み込み関数
ARITH
SIZE ERROR 句 (Enterprise COBOL 言語解説書)