Sun Studio 12: Fortran プログラミングガイド

7.8.1 結果が近いけれども十分ではない場合

次の内容を試みてください。


      real*4 x,y
      x=99999990e+29
      y=99999996e+29
      write (*,10) x, x
 10   format('99,999,990 x 10^29 = ', e14.8, ' = ', z8)
      write(*,20) y, y
 20   format('99,999,996 x 10^29 = ', e14.8, ' = ', z8)
      end

出力は次のように表示されます。


99,999,990 x 10^29 = 0.99999993E+37 = 7CF0BDC1
99,999,996 x 10^29 = 0.99999993E+37 = 7CF0BDC1

この例では、差は 6 x 1029 です。このような大きな差異が生じる理由は、IEEE の単精度で保証されているのは 10 進 - 2 進変換に対して 10 進の 6 桁だけだからです。7 桁や 8 桁を正しく変換できる場合もありますが、これは値によって異なります。