変換と精度

異なる固定小数点データ形式 (外部 10 進数、パック 10 進数、および 2 進数) の間の変換は、 ターゲット・フィールドにソース・オペランドのすべての数字が入りさえすれば、精度を落とすことなく完了できます。

データが失われる可能性のある変換

固定小数点データ形式と浮動小数点データ形式 (短精度浮動小数点、長精度浮動小数点、 および外部浮動小数点) との間の変換では、精度が落ちる可能性があります。 こうした変換は、固定小数点オペランドと浮動小数点オペランドが混在している演算評価の際に生じます。 (以下のいくつかの例で固定小数点項目について述べていますが、 固定小数点項目と外部浮動小数点項目には共に 10 進数の特性があるため、 特に明記されていない限り外部浮動小数点項目についても同じことが言えます。)

固定小数点から内部浮動小数点形式に変換する場合、 基数 10 の固定小数点数値は、内部で使用している基数 16 の数値システムに変換されます。

コンパイラーは短形式を長形式に変換して比較しますが、短い数値のための埋め込みには 0 を使用します。

USAGE COMP-1 データ項目が 7 桁以上の固定小数点データ項目に移動される場合、 固定小数点データ項目の受け取る有効数字は 6 桁だけであり、残りの桁は 0 になります。

精度を保存する変換

6 桁以下の固定小数点データ項目が USAGE COMP-1 データ項目に移動されてから、 再度固定小数点データ項目に戻されると、それは元の値になります。

USAGE COMP-1 データ項目が 6 桁以上の固定小数点データ項目に移動されてから、再度 USAGE COMP-1 データ項目に戻されると、 それは元の値になります。

15 桁以下の固定小数点データ項目が USAGE COMP-2 データ項目に移動されてから、再度固定小数点データ項目に戻されると、 それは元の値になります。

USAGE COMP-2 データ項目が 18 桁の固定小数点 (外部浮動小数点ではない) データ項目に移されてから、 再度 USAGE COMP-2 データ項目に戻されると、それは元の値になります。

丸めが行われる変換

USAGE COMP-1 データ項目、USAGE COMP-2 データ項目、 外部浮動小数点データ項目、または浮動小数点リテラルが固定小数点データ項目に移動されると、ターゲット・データ項目の低位桁で丸めが生じます。

USAGE COMP-2 データ項目が USAGE COMP-1 データ項目に移動されると、 ターゲット・データ項目の低位桁で丸めが生じます。

固定小数点データ項目が外部浮動小数点データ項目に移される場合、 その固定小数点データ項目の PICTURE に含まれる桁数が、 外部浮動小数点データ項目の PICTURE に含まれる桁数より多いならば、 ターゲット・データ項目の低位桁で丸めが生じます。

外部浮動小数点データが表示されるか、受け入れられたとき、 あるいは外部浮動小数点リテラルが外部浮動小数点データ項目に移動されたときに、 表示されるか、受け入れられるか、あるいは受け取られた外部浮動小数点データ項目が、 不正確な値である可能性があります。 これは、浮動小数点データ・タイプが近似値であるためです。 外部浮動小数点リテラルは受け入れ、表示、または移動されたときに、最初に、真の浮動小数点値 (IEEE) に変換され、 これがその正確性に影響することはあり得ます。 たとえば、次の MOVE の例を考えてみます。

77 external-float-1 PIC +9(3).9(13)E+9(3).
   MOVE +123455779012.34523E+297 to external-float-1.
   DISPLAY "EXTERNAL-FLOAT-1=" external-float-1.

表示される MOVE の結果は、次のとおりです。

EXTERNAL-FLOAT-1=+123.4557790123452E+306