NetCOBOL 技術情報:ノウハウ情報
共通
NetCOBOLシリーズ
Q
浮動小数点数の演算結果はGSとオープン系OSで一致しますか。
A
GSとオープン系のOSでは使用しているCPUの仕様が異なるため、浮動小数点数の演算結果は一致しない場合があります。
浮動小数点数は内部的に、GSでは16進数、オープン系では2進数により値を表現していますが、全ての値が表現できるわけではなく、近似値で表されています。たとえば、10進数で1/3(三分の一)が3.333~と正確には表せないように、2進数では1/10(十分の一)を正確に表現することができません。GSの16進表現も同様に表せない値があります。これらの近似値表現を使った値を演算に使用すると、演算結果は誤差を含みます。
これは、COBOLの仕様ではなくCPUの仕様の違いに依存しています。したがって、ホストとオープン系の浮動小数点数の転記、演算で同じ答えを求めることは、アーキテクチャーの違いから困難です。
プログラミングで行える対策としては、「浮動小数点数を他のデータ形式で保持し、専用の演算ルーチン(エミュレータ)を作成してソフトウェア処理する」または「変換テーブルを用意し、オープン系の演算結果をホストの値に変換する」といった方法が考えられます。
浮動小数点演算に関するアーキテクチャーの違いについては、技術資料の「浮動の転記・演算(GS/M浮動形式とIEEE浮動形式)について」をご覧ください。
