33

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

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

但这是什么real*8意思?

我认为这8意味着小数点后面有8位数字。但是,维基百科似乎说单精度通常提供 6-9 位,而双精度通常提供 15-17 位。这是否意味着声明“64 位精度”与 不一致real*8

4

3 回答 3

36

8 指的是数据类型使用的字节数。

所以一个 32 位整数也是如此integer*4

快速搜索找到了 Fortran 数据类型指南,其中包括:

“real*4”语句将变量名称指定为单精度 4 字节实数,其精度为 7 位,幅度范围为 -38 到 +38 的 10。在几乎所有 32 位计算机中,“real”语句与“real*4”语句相同。

“real*8”语句将变量名称指定为双精度 8 字节实数,精度为 15 位,幅度范围为 -308 到 +308 的 10。在几乎所有 32 位计算机中,“双精度”语句与“real*8”语句相同。

于 2012-05-09T17:10:49.130 回答
26

现在至少有 4 种方法可以在 Fortran 中指定精度。

正如已经回答real*8的那样,指定字节数。它有些过时,但应该是安全的。

新方法是使用“种类”。应该使用内在函数来获得具有所需精度的类型。通过特定数值指定种类是有风险的,因为不同的编译器使用不同的值。

还有一种方法是使用 ISO_C_Binding 的命名类型。这个问题讨论了整数的种类系统——它与实数非常相似。

于 2012-05-09T18:03:07.197 回答
15

如果TYPE*n与. TYPE_CHARACTER

如果应用于字符类型,它会创建一个n字符数组(或字符串n)。

如果应用于其他类型,它指定存储大小(以字节为单位)。在引入了类型KIND概念的 Fortran 90+ 中,应不惜一切代价避免这种情况。指定存储大小会创建非便携式应用程序。

于 2012-05-09T17:45:39.447 回答