【发布时间】:2017-07-30 18:59:07
【问题描述】:
我正在将一些 Fortran 翻译成我们的 C# 应用程序,并试图弄清楚 Fortran 在函数顶部的含义。
DOUBLE PRECISION INF, DMIN, D12
DATA INF/1.D+300/
INF 的值是多少?
【问题讨论】:
标签: fortran
我正在将一些 Fortran 翻译成我们的 C# 应用程序,并试图弄清楚 Fortran 在函数顶部的含义。
DOUBLE PRECISION INF, DMIN, D12
DATA INF/1.D+300/
INF 的值是多少?
【问题讨论】:
标签: fortran
The D means "× 10???",或者在 C# 中通常称为1.e+300 中的e,但它是用于双精度的。
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, ...)。
【讨论】:
代码声明了一个名为INF(即无穷大)的常量,其值为10^300。您可能需要替换为 double.PositiveInfinity 或 double.MaxValue。
【讨论】:
代码的风格是 FORTRAN IV 或 FORTRAN 77,而不是 Fortran 90/95/2003。
双精度声明变量的精度是常规实数的两倍。我不确定那个时代的 FORTRAN 标准是否非常精确地说明了这意味着什么,因为当时有更多种类的数字硬件。今天,它几乎总是会获得一个 8 字节的实数。 Data 语句初始化变量 INF。在常量“1.D+300”中使用“D”而不是 E,是旧的 FORTRAN 来指定常量是双精度的。
Fortran (>=90) 获取最大正双精度的方法是:
INF = 巨大 (1.0D+0)
【讨论】:
该值将是 1.0e300,但我确信它的意图是将其设置为当前 CPU 上可以表示的最大双精度值。所以在 C# 中这将是 double.PositiveInfinity 而不是一些硬编码的值。
【讨论】: