有没有办法在Fortran中用固定格式的打印极小的双精度数字?不知何故,"E“被截断了。
在下面的代码中将“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注意:这是一个代码,在代码中,我检查通过两种不同的数学方法得到的解是否一致。大多数情况下,差异很小(即远低于机器精度),但情况可能并不总是如此。
发布于 2015-11-27 04:28:48
可以使用Ew.dEe描述符指定指数中的数字数。它也适用于科学和工程格式。
write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x
给出
fmt=ES15.3E3: x = 2.718E-200
发布于 2015-11-27 04:24:45
在没有规范的情况下,指数字段的大小的默认宽度为2。如果指数大小需要比指数字段提供的字符多一个字符,则删除E或D指数字母。(请注意,对于Fortran格式化的输入,该表单带有缺失的指数字母,是完全可以接受的。)
如果您想要三个字符指数,那么指定三个字符指数。
write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x
write(*,fmt='(A,E15.3E3)') " fmt= E15.3E3: x = ", x https://stackoverflow.com/questions/33949616
复制相似问题