【发布时间】:2016-06-23 12:31:49
【问题描述】:
我需要将 Fortran 77 代码翻译成 C 语言,我有大约 90% 的翻译,但我不理解 Fortran 的某些部分,例如,在 Fortran 中我有:
DIMENSION COEF(3,3),EXPON(3,3)
DATA COEF,EXPON/1.0D0,2*0.0D0,0.678914D0,0.430129D0,0.0D0,
$ 0.444635D0,0.535328D0,0.154329D0,0.270950D0,2*0.0D0,0.151623D0,
$ 0.851819D0,0.0D0,0.109818D0,0.405771D0,2.22766D0/
在这部分,我有一个长度为 3 的两个数组,所以,当我阅读 DATA 的文档时,我需要将每个值放入两个数组中,所以我在 C 中有下一段代码:
COEF[0][0] = 1.0;
COEF[0][1] = 2.0;
COEF[0][2] = 0.6789140;
COEF[1][0] = 0.4301290;
COEF[1][1] = 0.0;
COEF[1][2] = 0.4446350;
COEF[2][0] = 0.5353280;
COEF[2][1] = 0.1543290;
COEF[2][2] = 0.2709500;
EXPON[0][0] = 2.0;
EXPON[0][1] = 0.1516230;
EXPON[0][2] = 0.8518190;
EXPON[1][0] = 0.0;
EXPON[1][1] = 0.1098180;
EXPON[1][2] = 0.4057710;
EXPON[2][0] = 2.227660;
EXPON[2][1] = 0.0;
EXPON[2][2] = 0.0;
假设我需要将参数列表与值列表相关联,我只有 16 个值,但两个数组之间有 18 个空格,那么最后两个空格会发生什么?呵呵
【问题讨论】:
-
不要在一篇文章中指定太多问题,这会使其过于宽泛。您可以通过在这里搜索轻松找到一些答案。 1.0d-6 的含义很容易找到(只是 1e-6 的双精度)。算术 if 在这个网站上也被处理了好几次。
-
在
data语句中2*0不是乘法,而是多重性。也就是说,一个得到两个零值,而不是一个(两倍的零)。如果那是您的困惑,应该还有其他问题可以找到。 -
确实如此。我什至没有阅读那部分的细节。我发现了一个问题,其中提到但不完全相同。
-
在 Fortran 中,数据存储在主行中。分配你的数据 COEF[0][0], COEF[1][0], COEF[2][0], COEF[0][1] ...否则当你翻译任何算法时,它会变得很糟糕.