プログラム内の算術計算では (それが算術ステートメント、組み込み関数、式、または相互にネストされたこれらの組み合わせのいずれであっても)、算術計算のコーディング方法によって、浮動小数点演算になるか、固定小数点演算になるかが決まります。
プログラム内の多くのステートメントには、算術計算が伴うことがあります。例えば、以下のそれぞれの COBOL ステートメントには、ある種の算術計算が必要です。
compute report-matrix-col = (emp-count ** .5) + 1 add report-matrix-min to report-matrix-max giving report-matrix-tot
compute report-matrix-col = function sqrt(emp-count) + 1 compute whole-hours = function integer-part((average-hours) + 1)
if report-matrix-col < function sqrt(emp-count) + 1 if whole-hours not = function integer-part((average-hours) + 1)
通常、算術計算に以下のいずれかの特性がある場合、それは浮動小数点演算で評価されます。
オペランドは、浮動小数点リテラルとしてコーディングするか、あるいは USAGE COMP-1、USAGE COMP-2、または外部浮動小数点 (浮動小数点 PICTURE を指定した USAGE DISPLAY または USAGE NATIONAL) として定義されたデータ項目としてコーディングした場合に浮動小数点になります。
オペランドがネストされた算術式である場合、または数字組み込み関数への参照である場合、そのオペランドは次の条件のいずれかが当てはまるとき、浮動小数点演算になります。
指数は、小数部の桁を含むか (小数部の桁を含むリテラルを使用する場合)、小数部の桁を含む PICTURE を項目に与えるか、あるいは結果が小数部の桁を持つ算術式または関数を使用します。
算術式または数字関数は、オペランドまたは引数 (除数および指数を除く) に小数部の桁がある場合には、小数部の桁がある結果をもたらします。
通常、算術演算に上記の浮動小数点についての特性がない場合、コンパイラーはそれを固定小数点演算で評価します。すなわち、算術計算が固定小数点として処理されるのは、すべてのオペランドが固定小数点で、結果フィールドが固定小数点と定義されており、しかもどの指数も小数部の桁がある値を表さない場合だけです。また、ネストされた算術式および関数参照も、固定小数点値を表さなければなりません。
関係演算子を使用して数式を比較する場合、数式 (それらがデータ項目、算術式、関数参照、またはこれらの組み合わせのいずれであっても) は、計算全体のコンテキストでは、被比較数です。 すなわち、それぞれの属性が互いの計算に影響を与える可能性があり、両方の式が固定小数点で評価されるか、または両方の式が浮動小数点で評価されることになります。これは、簡略比較にも当てはまります (比較の中で一方の被比較数が明示的に指定されない場合でも)。以下に例を示します。
if (a + d) = (b + e) and c
このステートメントには、(a + d) = (b + e) と (a + d) = c の 2 つの比較があります。(a + d) は、2 番目の比較では明示的に指定されていませんが、その比較の被比較数です。したがって、c の属性が (a + d) の計算に影響を与える可能性があります。
比較演算 (および比較の中にネストされた算術式の評価) は、一方の被比較数が浮動小数点値であるかまたは結果が浮動小数点値になる場合、コンパイラーによって浮動小数点演算として処理されます。
比較演算 (および比較の中にネストされた算術式の評価) は、両方の被比較数が固定小数点値であるかまたは結果が固定小数点値になる場合、コンパイラーによって固定小数点演算として処理されます。
暗黙の比較 (関係演算子が使用されない) は、単位として扱われません。しかし、2 つの被比較数は、浮動小数点演算または固定小数点演算における評価に関しては別々に扱われます。以下の例では、実際には、それぞれの属性に関係なく評価され、その後で相互に比較される 5 つの算術式があります。
evaluate (a + d)
when (b + e) thru c
when (f / g) thru (h * i)
. . .
end-evaluate
関連参照
非算術ステートメントの算術式