gfortran中的一些奇怪的输出结果

时间:2014-07-20 23:25:06

标签: formatting fortran output

我必须在Fortran类的输出格式化日期间睡着了,因为这些结果令我感到困惑。使用gfortran 4.6,

这个程序

program f1
  real :: x=65246514
  write(*,*) x
end program f1

结果

   65246512.0

这个程序

program f1
  real :: x=65245.6525
  write(*,*) x
end program f1

结果

   65245.6523 

最后,这个程序

program f1
  real :: x=65226545.6525
  write(*,'(F14.4)') x
end program f1

结果

 65226544.0000

显然,控制台输出不是分配给x的输出。是否有一些有限的精度结果导致这种情况?

1 个答案:

答案 0 :(得分:1)

问题是变量和常量是单精度,只有大约7个十进制数字可用。比较:

program f1
  use, intrinsic :: ISO_FORTRAN_ENV
  implicit none
  real :: x=65226545.6525
  real (real64) :: y=65226545.6525_real64
  write(*,'(F14.4)') x
  write(*,'(F14.4)') y
end program f1

,它通过ISO Fortran环境使用双精度数,指定为real64,即64位。 real64也用在常量上,否则它将被计算为单精度常量,然后存储在双精度变量y中。 (如果您需要更多数字,可以使用四极杆精度real128。)