我必须在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
的输出。是否有一些有限的精度结果导致这种情况?
答案 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
。)