我在Fortran代码中为a=0.00001
分配了一个实变量。在下一行打印变量时,a=9.9999997473787516E-006
代替1E-5
。
此问题的解决方法是声明a=0.00001_8
或a=0.00001_rk
,rk
定义为值8
。
我想在编程中避免这种underscore
样式。有没有像C
或C++
答案 0 :(得分:2)
我会在这里列出几个选项,但最终答案是使用下划线符号。特别是在开发新代码时,所有实际变量都应使用kind
参数。有几种方法可以定义种类参数:
ISO_FORTRAN_ENV
包含按其大小定义的实数和整数:REAL32
,REAL64
,INT32
,INT64
和其他。SELECTED_REAL_KIND
获取具有指定精度和指数范围的种类IEEE_SELECTED_REAL_KIND
用于IEEE兼容性ISO_C_BINDING
包含C_DOUBLE
和其他C互操作性这样,您就可以在任何机器上实现所需的精度。例如,
use ISO_FORTRAN_ENV, only : wp => REAL64
real(wp) :: x
重要的是要明确声明wp
。然后,如果您希望x的值为0.1,则使用<{p>}种类将其设置为等于0.1
wp
这是fortran符号。你不应该仅仅因为你认为它的可读性较低而拒绝它。
但是,我还会提供其他几个选项。虽然它们不是那么好!
使用x = 0.1_wp
而不是d
声明常量,e
请求double precision
,例如x = 0.1d0
使用编译器标志更改默认的实际类型。在gfortran
中,您通常会使用-fdefault-real-8 -fdefault-double-8
。这个编译器选项并不总是存在(当然不是完全相同),也限制了你可以声明的真实种类。
答案 1 :(得分:1)
您可以使用指数D代替E:
a=0.00001d0
仅在变量a被声明为双精度(rk)时才有用,其定义如下:
integer,parameter :: rk=selected_real_kind(15,100)
此外,请勿使用_8
,但_rk
(_8
不可移植)。