【问题标题】:What does "real*8" mean?“真实*8”是什么意思?
【发布时间】:2012-05-18 05:56:25
【问题描述】:

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

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

但是real*8 是什么意思?

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

【问题讨论】:

    标签: fortran precision bit fortran90


    【解决方案1】:

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

    所以一个 32 位整数是 integer*4 沿着相同的行。

    快速搜索发现this guide to Fortran data types,其中包括:

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

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

    【讨论】:

    • -1 表示 Jon Skeet 通过引用一个古老且具有误导性的参考资料来回答 Fortran 问题。这个问题的其他答案表明对现代 Fortran 有更好的理解。
    • @HighPerformanceMark:也许你可以给我一个更有用的链接让我改成这样?我当然不会声称我对 Fortran 有一点了解,但答案的核心(8 代表字节数)实际上是不正确或误导的吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 更新:现在更普遍地支持 ISO 环境模块的 Fortran 2008 扩展。因此,如果您use ISO_FORTRAN_ENV,您将可以访问按位数指定实数和整数类型的类型值(例如,real (real32) ::real (real64) ::),作为按存储大小指定类型的标准且可移植的方式。
    【解决方案3】:

    如果与TYPE 而非CHARACTER 一起使用,星号符号(称为TYPE*n)是非标准的Fortran 构造。

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-05
      • 1970-01-01
      • 2016-07-27
      • 2014-09-28
      • 2021-12-14
      • 2016-05-05
      • 2020-06-05
      • 1970-01-01
      • 2022-12-12
      相关资源
      最近更新 更多