IBM Extension
IBM Extension

浮動小数点データと中間結果

浮動小数点命令は、以下の任意の条件が真の場合、算術式を計算するために使用されます。
  • 式の受け入れ項目またはオペランドは、COMP-1、COMP-2、外部浮動小数点データ、または浮動小数点リテラルです。
  • 組み込み数字関数は、浮動小数点関数です。
  • 式は、浮動小数点関数の引数です。

算術式の任意の演算が浮動小数点で計算された場合、 その式全体は、すべてのオペランドが浮動小数点に変換されたかのように、 また演算が浮動小数点命令を使用して評価されたかのように、計算されます。

式が浮動小数点で計算される場合は、 式の任意の受け入れ項目またはオペランドが COMP-1 でないとき、 または乗算または指数演算が式に現れたとき、倍精度浮動小数点が使用されます。 算術式の 1 つの演算で倍精度浮動小数点が使用された場合は、式のすべての演算が、 倍精度浮動小数点命令が使用されたかのように計算されます。

浮動小数点の指数は、常に倍精度浮動小数点演算を使用して評価されます。

負の数の、小数の累乗の値は未定義になります。 例えば、(-2) ** 3 は -8 になりますが、(-2) ** (3.000001) は未定義になります。 指数が浮動小数点で評価され、その指数の値が未定義になる (上記の例のように) 可能性がある場合、 その指数の値が実際に整数であるかどうかを判別するため、実行時に評価されます。

浮動小数点の数字関数は、常に倍精度浮動小数点値を戻します。 浮動小数点関数および固定小数点関数のリストについては、「IBM® Rational® Development Studio for i: ILE COBOL プログラマーの手引き」の『"数字関数のタ イプ"』を参照してください。

算術式は、算術ステートメント以外のコンテキストの中に出てきてもかまいません。 例えば、算術式を IF ステートメントで使用できます。 このようなステートメントでは、中間結果、浮動小数点、および倍精度浮動小数点に関する規則は、次の変更とともに適用されます。
  • 省略形の IF ステートメントは、そのステートメントが省略されなかったかのように処理されます。
  • 必要関係演算子が 2 つのオペランド (ここでは被比較数として参照) 間の比較を定義するために使用されている場合、 明示的比較条件が存在します。 片方または両方の被比較数が算術式である明示的比較条件において、 中間結果に関する規則は、両方の被比較数の属性を考慮して判別されます。 このことはつまり、dmax は、除数および指数を除く、 いずれかの被比較数の任意のオペランドに対して定義された小数桁の最大数になるように定義されているということです。 浮動小数点および倍精度浮動小数点に関する規則は、 いずれかの被比較数の任意のオペランドが、COMP-1、COMP-2、外部浮動小数点データ、 または浮動小数点リテラルである場合に、適用されます。
    例えば、次のステートメントの場合、
      IF operand-1 = expression-1 THEN . . .
    オペランド -1 が COMP-2 で定義されているデータ名で、式 -1 が固定小数点オペランドのみを含んでいる場合、 浮動小数点演算に関する規則は、式 -1 が浮動小数点オペランドと比較されているため、式 -1 に適用されます。
  • 算術式と、データ項目または他の算術式のいずれかとの間の比較が、 関係演算子を使用しないで定義されていた場合、明示的比較条件が存在するとは言えません。 これらの場合、その比較は、明示的な演算子を持つ 1 つまたは複数の IF ステートメントとして書き直すことができます。 したがって、それぞれの IF ステートメントは、上記で概説された明示的な比較条件についての規則に従います。 例えば、次のステートメントの場合、
EVALUATE expression-1
  WHEN expression-2 THRU expression-3
  WHEN expression-4
  .
  .
  .
END-EVALUATE
同等の IF ステートメントは、次のようになります。
IF expression-1 >= expression-2 AND
   expression-1 <= expression-3
IF expression-1 = expression-4
   then for each IF statement, the comparands must be looked at
   to determine if all the arithmetic in that IF statement will
   be fixed-point or floating-point.
End of IBM Extension
End of IBM Extension