【问题标题】:What does DATA INF/1.D+300/ mean in Fortran?DATA INF/1.D+300/ 在 Fortran 中是什么意思?
【发布时间】:2017-07-30 18:59:07
【问题描述】:

我正在将一些 Fortran 翻译成我们的 C# 应用程序,并试图弄清楚 Fortran 在函数顶部的含义。

  DOUBLE PRECISION INF, DMIN, D12

  DATA INF/1.D+300/

INF 的值是多少?

【问题讨论】:

    标签: fortran


    【解决方案1】:

    The D means "× 10???",或者在 C# 中通常称为1.e+300 中的e,但它是用于双精度的。

    DOUBLE PRECISION statement 只定义了 3 个变量为 double 类型。

    DATA statement

    DATA X/Y/
    

    翻译成

    X = Y;
    

    在 C# 中。因此你得到

    double INF = 1.e+300, DMIN, D12;
    

    由于INF 很大,我相信它的意思是“无限”,在这种情况下最好使用real IEEE infinity (double INF = double.PositiveInfinity, ...)。

    【讨论】:

      【解决方案2】:

      代码声明了一个名为INF(即无穷大)的常量,其值为10^300。您可能需要替换为 double.PositiveInfinitydouble.MaxValue

      【讨论】:

        【解决方案3】:

        代码的风格是 FORTRAN IV 或 FORTRAN 77,而不是 Fortran 90/95/2003。

        双精度声明变量的精度是常规实数的两倍。我不确定那个时代的 FORTRAN 标准是否非常精确地说明了这意味着什么,因为当时有更多种类的数字硬件。今天,它几乎总是会获得一个 8 字节的实数。 Data 语句初始化变量 INF。在常量“1.D+300”中使用“D”而不是 E,是旧的 FORTRAN 来指定常量是双精度的。

        Fortran (>=90) 获取最大正双精度的方法是:

        INF = 巨大 (1.0D+0)

        【讨论】:

          【解决方案4】:

          该值将是 1.0e300,但我确信它的意图是将其设置为当前 CPU 上可以表示的最大双精度值。所以在 C# 中这将是 double.PositiveInfinity 而不是一些硬编码的值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-16
            • 2011-12-14
            • 2011-12-27
            • 2020-06-26
            • 2010-12-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多