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 单精度运算是造成此种无法区分的巨大差距的原因,对于任一十进制到二进制的转换,只能保证六位十进制数字。您有可能能够正确转换七位或八位数字,但这取决于具体的数字。