子函数中整数声明的原因

时间:2014-02-28 18:33:55

标签: fortran fortran95

我有两个程序可以为我提供的输入提供完全相同的结果。它们实际上是完全相同的程序,除了第二个程序(第103行)中的这一行'integer dim'。这不在第一个程序中(如果它在那里应该是第141行)。

http://pastebin.com/wh7NUt3Z& http://pastebin.com/S1hAB6TW

现在,问题在于整数dim的这个声明在第二个程序中比在第一个程序(由此计时器找到)中的时间慢。 我在第一个程序中再次声明了整数,我发现它给了我与第二个程序相同的时间,所以我知道这就是第二个程序速度慢的原因。

现在我想知道为什么我必须在第二个程序中再次声明这个整数,但不是在第一个程序中...如果可能的话,我想删除它(因为它会减少计算时间)。 / p>

任何有帮助的人?

1 个答案:

答案 0 :(得分:2)

这些程序完全不一样!我认为你的第一个链接是错误的。

但无论如何,你在第二个程序中需要INTEGER DIM的原因是没有它,它就是隐含的REAL。由于你传递的是一个整数,如果你没有将DIM声明为整数,那么这些位将被误解为真实和坏事,并且任何时间都是无关紧要的。很可能整数位将被解释为非正规化实数值,使得循环的上限为零。

我还要注意,如果没有整数声明,由于非整数DO循环控制变量,这个程序不是标准的Fortran 2003 - 这是一个从语言中删除的错误功能。