Sun Studio 12:Fortran 编程指南

7.8 疑难解答

此处给出了一些建议,适用于移植到 Fortran 95 的程序没有按预期运行的情形。

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

7.8.2 程序失败而不警告

如果程序失败而不发出警告,并且失败之间运行的时间长度不同,则: