0

我有一个 gfortran 错误:

Warning: Obsolete: arithmetic IF statement at (1) 

这是什么意思?在源(旧源)中:

66 s12 = max(epsilon, s1 + s2)
c Then execution will go to label 13. Will this stop any further problems?
if (s12 - 1.0) 13, 13, 12
13 z = s1 / s12
4

3 回答 3

0

在这里检查:

http://www.ibiblio.org/pub/languages/fortran/ch1-5.html

“算术 IF 被认为是有害的。”

你的声明,

if (s12 - 1.0) 13, 13, 12是算术 IF,被认为是糟糕的编程。

于 2012-05-25T17:39:28.243 回答
0

算术 if 是 FORTRAN 的一个独特功能

它的工作原理如下。

 IF (expr) label1, label2, label3

如果表达式的值为

less than 0, jump to label1 
equal to 0, jump to label2
greater than 0, jump to label3

在较新的 FORTRAN 标准中,此功能已过时

在您的代码中,您可以将其替换为

      IF (s12 - 1.0 .gt. 0 ) GOTO 12
13    z = s1 / s12
于 2012-05-25T17:41:10.263 回答
0

维基百科

“..Fortran 语句定义了三个不同的分支,具体取决于表达式的结果是负数、零还是正数,按所述顺序……”

“..最终在 Fortran 90 中被标记为过时。”

于 2012-05-25T17:41:21.973 回答