有沒有辦法在Fortran中以固定格式打印極小的雙精度數字?不知何故,「E」被截斷。如何在Fortran中使用固定格式打印極小的雙精度數字?
更改「ES15」代碼中的「ES18」下面沒有幫助:
program print_double
implicit none
double precision :: x
x = 2.71818D-200
write(*,*) "fmt=* : x = ", x
write(*,fmt='(A,ES15.3)') " fmt=ES15.3: x = ", x
write(*,fmt='(A,E15.3)') " fmt= E15.3: x = ", x
end program print_double
下面是輸出:
$ gfortran print_double.f90 -o print_double && ./print_double
fmt=* : x = 2.7181800000000000E-200
fmt=ES15.3: x = 2.718-200
fmt= E15.3: x = 0.272-199
$ ifort print_double.f90 -o print_double && ./print_double
fmt=* : x = 2.718180000000000E-200
fmt=ES15.3: x = 2.718-200
fmt= E15.3: x = 0.272-199
注:這是一個代碼中,我檢查通過兩種不同數學方法獲得的解決方案是否一致。大部分時間,差異很小(即低於機器精度),但情況並非總是如此。