我选择了代码中的精度如下:
integer, parameter ::psn=selected_real_kind(15,307) 然后,我用_psn编写代码中出现的数字,例如:
y=x/6._psn 我在代码中有许多长表达式,其中许多数字出现在乘法和除法中。现在我的问题是:是否有任何方法将代码中出现的所有数字的精度设置为选定的精度,而不显式地到处指定_psn?
发布于 2014-03-05 08:16:28
发布于 2021-02-18 01:09:18
以可移植的方式,no。
如果您选择方便性和可读性而不是可移植性和可维护性,则可以使用编译器标志来更改默认类型的REAL,正如公认的答案所示。
重要的是要明白,在这样做的过程中,一些基于标准的假设往往会被打破。下面是一些示例:
REAL,这可能会丢失,但至少在gfortran中,用于此目的的常用标志仍然支持该规则:
-fdefault-real-8将默认的实类型设置为8字节宽的类型。此选项还会影响非双实常量的类型,如1.0。如果可能的话,此选项将DOUBLE PRECISION1.d0和双实常量(如1.d0)的默认宽度提升到16字节。
后两者意味着有一个叫做数字存储单元的东西,它是数字类型存储的基本构建块,而默认的REAL、INTEGER和LOGICAL变量占据了其中的一个,而默认的DOUBLE PRECISION和COMPLEX占用了其中的2个。不用说,当您更改默认类型时,这些合约可能也会被破坏。
无论如何,受影响的代码可能(甚至可能)不依赖其中任何一个,在这种情况下,使用这些标志是无害的。然而,了解这些风险仍然很重要。
https://stackoverflow.com/questions/22191520
复制相似问题