“真正的* 8”是什么意思?

时间:2012-05-09 17:08:45

标签: fortran precision bit fortran90

用Fortran 90编写的程序手册说:“所有实数变量和参数都以64位精度(即real*8)指定。”

根据Wikipedia,单精度对应于32位精度,而双精度对应于64位精度,因此显然程序使用双精度。

real*8是什么意思?

我认为8意味着8位数跟随小数点。但是,Wikipedia似乎表示单精度通常提供6-9位数,而double precision通常提供15-17位数。这是否意味着“64位精度”语句与real*8不一致?

3 个答案:

答案 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 类型的概念。指定存储大小会创建非便携式应用程序。

相关问题