2015-11-27 37 views
1

有沒有辦法在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 

注:這是一個代碼中,我檢查通過兩種不同數學方法獲得的解決方案是否一致。大部分時間,差異很小(即低於機器精度),但情況並非總是如此。

回答

2

您可以使用Ew.dEe描述符指定指數中的位數。它也適用於科學和工程的格式。

write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x

fmt=ES15.3E3: x = 2.718E-200

1

指數字段的大小的缺省寬度,如果沒有其他規範,則爲2。如果指數大小需要比指數字段提供的字符多一個字符,則會丟棄指數字母ED。 (請注意,帶有缺失指數字母的此表單完全可以接受Fortran格式化輸入。)

如果您需要三個字符指數,則指定三個字符指數。

write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x 
write(*,fmt='(A,E15.3E3)') " fmt= E15.3E3: x = ", x 
相關問題