代码之家  ›  专栏  ›  技术社区  ›  Paul Mendoza

在Fortran中,data inf/1.d+300/是什么意思?

  •  3
  • Paul Mendoza  · 技术社区  · 16 年前

    我正在将一些Fortran翻译成我们的C应用程序,我正试图弄清楚在函数的顶部,一点Fortran意味着什么。

      DOUBLE PRECISION INF, DMIN, D12
    
      DATA INF/1.D+300/
    

    inf的值是多少?

    4 回复  |  直到 8 年前
        1
  •  4
  •   kennytm    16 年前

    The D means "× 10 ??? " 或通常称为 e 在里面 1.e+300 在C中,但它是为了双精度。

    这个 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
  •  2
  •   Gabe Timothy Khouri    16 年前

    代码正在声明一个名为 INF (即无穷大),值为10^300。你想替换一下 double.PositiveInfinity double.MaxValue .

        3
  •  2
  •   M. S. B.    16 年前

    代码的样式是Fortran IV或Fortran 77,而不是Fortran 90/95/2003。

    double precision声明变量的精度是正则实数的两倍。我不确定那个时代的Fortran标准对这意味着什么是极其精确的,因为那时有更多的数字硬件。今天,它实际上总是获得一个8字节的实数。数据语句初始化变量inf。使用常量“1.d+300”中的“d”而不是e,是旧的Fortran,用于指定常量为双精度。

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

    inf=巨大(1.0d+0)

        4
  •  1
  •   John Knoeller    16 年前

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

    推荐文章