首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免为fortran实数变量声明"_8“?

避免为fortran实数变量声明"_8“?
EN

Stack Overflow用户
提问于 2017-03-15 03:40:36
回答 2查看 492关注 0票数 0

我在Fortran代码中指定了一个实数变量作为a=0.00001。在打印以下行的变量时,给出了a=9.9999997473787516E-006而不是1E-5

此问题的修复方法是使用用值8定义的rk声明a=0.00001_8a=0.00001_rk

我想在我的编程中避免这种underscore风格。有没有像在CC++中那样不用下划线的方法?

EN

回答 2

Stack Overflow用户

发布于 2017-03-15 05:19:06

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

  • ISO_FORTRAN_ENV具有由其大小定义的实数和整数:REAL32REAL64INT32INT64和其他。
  • 使用内部函数SELECTED_REAL_KIND来获取具有指定精度和指数的类型。用于IEEE的range
  • IEEE_SELECTED_REAL_KIND包含用于C interoperability

C_DOUBLE和其他

这样,您就可以在任何机器上达到所需的精度。例如,

代码语言:javascript
复制
use ISO_FORTRAN_ENV, only : wp => REAL64
real(wp) :: x

重要的部分是显式声明wp。然后,如果希望x的值为0.1,则将其设置为等于0.1,使用wp类型表示,使用

代码语言:javascript
复制
x = 0.1_wp

这是fortran符号。您不应该仅仅因为您认为它可读性较差而拒绝它。

但是,我将包括其他几个选项。但它们并不是那么好!

  • 使用d而不是e声明常量,后者请求double precision,例如x = 0.1d0
  • Use编译器标志以更改默认的实数类型。在gfortran中,您通常会使用-fdefault-real-8 -fdefault-double-8。这个编译器选项并不总是存在的(当然也不是以完全相同的方式存在),而且还限制了您可以声明的可能的实数类型。
票数 2
EN

Stack Overflow用户

发布于 2017-03-15 03:55:04

您可以使用指数D而不是E:

代码语言:javascript
复制
a=0.00001d0

只有当您的变量a被声明为实数( rk )的双精度且rk定义为:

代码语言:javascript
复制
integer,parameter :: rk=selected_real_kind(15,100)

此外,不要使用_8而要使用_rk (_8不可移植)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42795095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档