用Fortran 90编写的程序手册说:“所有实数变量和参数都以64位精度(即real*8
)指定。”
根据Wikipedia,单精度对应于32位精度,而双精度对应于64位精度,因此显然程序使用双精度。
但real*8
是什么意思?
我认为8
意味着8位数跟随小数点。但是,Wikipedia似乎表示单精度通常提供6-9位数,而double precision通常提供15-17位数。这是否意味着“64位精度”语句与real*8
不一致?
答案 0 :(得分:33)
8指的是数据类型使用的 bytes 的数量。
因此,32位整数沿着相同的行integer*4
。
快速搜索this guide to Fortran data types,其中包括:
“real * 4”语句将变量名称指定为单精度4字节实数,其精度为7位,幅度范围为-38到+38。 “真实”语句与几乎所有32位计算机中的“real * 4”语句相同。
和
“real * 8”语句将变量名称指定为双精度8字节实数,其精度为15位,幅度范围为-308至+308。 “double precision”语句与几乎所有32位计算机中的“real * 8”语句相同。
答案 1 :(得分:24)
现在至少有4种方法可以在Fortran中指定精度。
正如已经回答的那样,real*8
指定了字节数。它有点过时,但应该是安全的。
新的方式是“种类”。应该使用内在函数来获得具有所需精度的类型。通过特定数值指定类型是有风险的,因为不同的编译器使用不同的值。
另一种方法是使用ISO_C_Binding的命名类型。 This question讨论了整数的种类系统 - 它与实数非常相似。
答案 2 :(得分:13)
星号表示法(如调用TYPE*n
)是非标准的Fortran构造,如果与TYPE
以外的CHARACTER
一起使用。
如果应用于字符类型,它会创建一个n
个字符数组(或一串n
个字符)。
如果应用于其他类型,则指定存储大小(以字节为单位)。在Fortran 90+中应该不惜一切代价避免这种情况,其中引入了 KIND 类型的概念。指定存储大小会创建非便携式应用程序。