首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fortran默认的数字精度

问fortran默认的数字精度
EN

Stack Overflow用户
提问于 2014-03-05 07:40:57
回答 2查看 1.2K关注 0票数 2

我选择了代码中的精度如下:

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

然后,我用_psn编写代码中出现的数字,例如:

代码语言:javascript
复制
  y=x/6._psn 

我在代码中有许多长表达式,其中许多数字出现在乘法和除法中。现在我的问题是:是否有任何方法将代码中出现的所有数字的精度设置为选定的精度,而不显式地到处指定_psn?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 08:16:28

您可以为编译器设置默认类型的real .

ifort:

代码语言:javascript
复制
-r8    Makes  default  real  and     complex variables 8 bytes long. 

gfortran

代码语言:javascript
复制
-fdefault-real-8    Set the default real type to an 8 byte wide type. 

然后,您可以在代码中使用1.e0 .

票数 0
EN

Stack Overflow用户

发布于 2021-02-18 01:09:18

以可移植的方式,no。

如果您选择方便性和可读性而不是可移植性和可维护性,则可以使用编译器标志来更改默认类型的REAL,正如公认的答案所示。

重要的是要明白,在这样做的过程中,一些基于标准的假设往往会被打破。下面是一些示例:

  • 双精度实逼近法的十进制精度应大于默认实数法。如果您只推广REAL,这可能会丢失,但至少在gfortran中,用于此目的的常用标志仍然支持该规则:

-fdefault-real-8 将默认的实类型设置为8字节宽的类型。此选项还会影响非双实常量的类型,如1.0。如果可能的话,此选项将DOUBLE PRECISION 1.d0 和双实常量(如1.d0)的默认宽度提升到16字节。

  • 默认整数、默认实数或默认逻辑的非指针标量对象占用单个数字存储单元。

  • 非指针标量对象是双精度的、真实的或默认的复杂对象,占用两个连续的数字存储单元。

后两者意味着有一个叫做数字存储单元的东西,它是数字类型存储的基本构建块,而默认的REAL、INTEGER和LOGICAL变量占据了其中的一个,而默认的DOUBLE PRECISION和COMPLEX占用了其中的2个。不用说,当您更改默认类型时,这些合约可能也会被破坏。

无论如何,受影响的代码可能(甚至可能)不依赖其中任何一个,在这种情况下,使用这些标志是无害的。然而,了解这些风险仍然很重要。

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

https://stackoverflow.com/questions/22191520

复制
相关文章

相似问题

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