避免声明" _8"对于fortran实际变量?

时间:2017-03-14 19:40:36

标签: floating-point fortran precision

我在Fortran代码中为a=0.00001分配了一个实变量。在下一行打印变量时,a=9.9999997473787516E-006代替1E-5

此问题的解决方法是声明a=0.00001_8a=0.00001_rkrk定义为值8

我想在编程中避免这种underscore样式。有没有像CC++

那样没有下划线的方法

2 个答案:

答案 0 :(得分:2)

我会在这里列出几个选项,但最终答案是使用下划线符号。特别是在开发新代码时,所有实际变量都应使用kind参数。有几种方法可以定义种类参数:

  • ISO_FORTRAN_ENV包含按其大小定义的实数和整数:REAL32REAL64INT32INT64和其他。
  • 使用内在函数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不可移植)。