我在Fortran代码中指定了一个实数变量作为a=0.00001。在打印以下行的变量时,给出了a=9.9999997473787516E-006而不是1E-5。
此问题的修复方法是使用用值8定义的rk声明a=0.00001_8或a=0.00001_rk。
我想在我的编程中避免这种underscore风格。有没有像在C或C++中那样不用下划线的方法?
发布于 2017-03-15 05:19:06
我将在这里列出几个选项,但最终答案是使用下划线表示法的。特别是在开发新代码时,所有实数变量都应该使用kind参数。有几种很好的方法可以定义kind参数:
ISO_FORTRAN_ENV具有由其大小定义的实数和整数:REAL32、REAL64、INT32、INT64和其他。SELECTED_REAL_KIND来获取具有指定精度和指数的类型。用于IEEE的rangeIEEE_SELECTED_REAL_KIND包含用于C interoperability的C_DOUBLE和其他
这样,您就可以在任何机器上达到所需的精度。例如,
use ISO_FORTRAN_ENV, only : wp => REAL64
real(wp) :: x重要的部分是显式声明wp。然后,如果希望x的值为0.1,则将其设置为等于0.1,使用wp类型表示,使用
x = 0.1_wp这是fortran符号。您不应该仅仅因为您认为它可读性较差而拒绝它。
但是,我将包括其他几个选项。但它们并不是那么好!
d而不是e声明常量,后者请求double precision,例如x = 0.1d0gfortran中,您通常会使用-fdefault-real-8 -fdefault-double-8。这个编译器选项并不总是存在的(当然也不是以完全相同的方式存在),而且还限制了您可以声明的可能的实数类型。发布于 2017-03-15 03:55:04
您可以使用指数D而不是E:
a=0.00001d0只有当您的变量a被声明为实数( rk )的双精度且rk定义为:
integer,parameter :: rk=selected_real_kind(15,100)此外,不要使用_8而要使用_rk (_8不可移植)。
https://stackoverflow.com/questions/42795095
复制相似问题