2011-01-22 70 views
2

问候。有人知道这个Fortran IF语句在做什么吗?Fortran - 来自旧(1972)代码的两分支IF语句

IF(IJJ-2) ,409,411 

我不认为这是一个错字,因为在同一个程序中有一些其他的。我认为这是一个标准的算术IF,它简单地将“小于0”分支默认为下一个exectutbale语句,但我不确定这一点。我认为这个代码在1970-1972年左右在CDC 6600上托管。我查看了FORTRAN 77子集标准,但它指定了必须提供的所有三个语句标签。任何建议最受赞赏。

回答

1

我认为目标行号小于,等于,大于零。 这看起来不像标准fortran,但猜测缺失的行数将 下降到下一个语句。

5

它被称为算术IF语句,在Fortran 90和95中已经过时。但是,我知道英特尔Fortran编译器仍然支持它。如果括号内的表达式小于零,则执行转移到第一个标签。如果等于零则表示第二个标签,最后如果大于零,则转移到第三个标签。我不确定在丢失标签的情况下会发生什么情况 - 我假设它只是落空。

所以,你的IF语句会转化为现代的Fortran为:

IF (IJJ == 2) THEN 
    GOTO 409 
ELSEIF (IJJ > 2) THEN 
    GOTO 411 
ENDIF 
0

这绝对是非标准的Fortran。我查了一下,英特尔和GFortran编译器都不接受它。在F90之前,许多Fortran编译器都有非标准扩展。我记得DEC编译器有很多扩展。这是用来卖点的!它还有助于确保客户的忠诚度,因为使用这些扩展的代码无法移植到其他编译器。你最好的选择是如果你能找到编译器附带的手册,它应该记录下来。祝你好运!

作为一个历史性的方面说明,我记得当时有些公司被告知,当时有些公司非常嫉妒他们的地盘,以及他们的非标准扩展给他们带来的好处,他们故意阻碍了标准流程,下一个Fortran版本(最终被称为F90)。这使得其他语言能够占据统治地位,并加速了Fortran的垮台。

+0

通过扩展,你的意思是这种类型的if语句或缺少的第一个标签?因为算术IF仍然是Fortran 2008的一部分。 – 2012-10-25 13:44:14