我正在将一些Fortran翻译成我们的C#应用程序,并且我试图找出Fortran在函数顶部的含义。
DOUBLE PRECISION INF, DMIN, D12
DATA INF/1.D+300/
INF的价值是什么?
答案 0 :(得分:4)
The D
means "× 10???",或者通常称为C#中e
中的1.e+300
,但它是双精度的。
DOUBLE PRECISION
statement只定义了3个变量double
。
DATA X/Y/
转换为
X = Y;
在C#中。因此你得到
double INF = 1.e+300, DMIN, D12;
由于INF
太大,我认为它意味着“无限”,在这种情况下,最好使用real IEEE infinity(double INF = double.PositiveInfinity, ...
)。
答案 1 :(得分:2)
代码声明一个名为INF
的常量(即无穷大),其值为10 ^ 300。您可能希望替换double.PositiveInfinity
或double.MaxValue
。
答案 2 :(得分:2)
代码采用FORTRAN IV或FORTRAN 77的风格,而不是Fortran 90/95/2003。
Double Precision声明变量是常规real的精度的两倍。我不确定那个时代的FORTRAN标准对于这意味着什么非常精确,因为那时有更多种类的数字硬件。今天,它几乎总能获得8字节的真实。 Data语句初始化变量INF。在常量“1.D + 300”而不是E中使用“D”是旧FORTRAN指定常量是双精度。
获得最大正双倍的Fortran(> = 90)方法是:
INF = huge(1.0D + 0)
答案 3 :(得分:1)
该值为1.0e300,但我确信它的目的是将其设置为可在当前CPU上表示的最大double值。所以在C#中将是double.PositiveInfinity
而不是一些硬编码的值。