我在Fortran代码中为a=0.00001
分配了一个实际变量。在打印下面的行上的变量时,给出a=9.9999997473787516E-006
而不是1E-5
。避免为fortran实变量声明“_8”?
解决此问题的方法是声明a=0.00001_8
或a=0.00001_rk
,并使用rk
定义值8
。
我想在编程时避免这种underscore
风格。有没有办法做到这一点没有下划线的是C
或C++
我在Fortran代码中为a=0.00001
分配了一个实际变量。在打印下面的行上的变量时,给出a=9.9999997473787516E-006
而不是1E-5
。避免为fortran实变量声明“_8”?
解决此问题的方法是声明a=0.00001_8
或a=0.00001_rk
,并使用rk
定义值8
。
我想在编程时避免这种underscore
风格。有没有办法做到这一点没有下划线的是C
或C++
您可以使用该指数d,而不是E:
a=0.00001d0
,如果你的变量已经被声明为双精度这是唯一有用的实(RK)王氏RK的定义为:
integer,parameter :: rk=selected_real_kind(15,100)
另外,不要用_8
但_rk
(_8
不可移植)。
如果类型值'rk'(或'8')与双精度值相同,则为真。 – francescalus
@francescalus几乎总是这样......除非我很久以前使用Cray或CDC电脑! –
我在一个小时前使用了一个编译器,它会拒绝接受'1._8'。如果我问它,那个编译器也可以接受'rk'作为默认类型。 – francescalus
我会在这里列出几个选项,但最终答案是使用下划线标记。特别是在开发新代码时,所有实际变量都应使用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,您使用
x = 0.1_wp
这是FORTRAN符号将其设置为使用wp
那种代表0.1。你不应该仅仅因为你认为它的可读性不好就拒绝它。
但是,我将包括一些其他选项。他们虽然不是很好!使用d
代替e
,这要求double precision
,例如x = 0.1d0
使用编译标志更改默认实样
声明常量。在gfortran
中,您通常会使用-fdefault-real-8 -fdefault-double-8
。这个编译器选项并不总是存在的(当然不是完全相同的),也限制了你可以声明的可能的真实类型。
有办法使用'0.00001'给像'0.0001_rk',但要真正回答这个问题_why_要避免使用(完全适合)的形式'0.0001_rk'将是有益的了解。我可以避免在我的程序中编写'0'来代替编写'1-1',但我怀疑有人会建议这样做。 – francescalus
基本上为了更好的可读性,我不想有任何后缀。有时代码的长度会因多个地方的后缀而增加。有没有办法做到这一点,如在C或C + +,我们不使用任何后缀声明的变量? –
你应该努力让你的代码可维护和便携。避免'_rk'表示法既不是那些东西。可读性很重要,但在这种情况下是次要的。 – Ross