我在我的程序中有一个do while
循环,谁的条件继续不断给我一个一个的错误,我不明白为什么。它看起来像这样:为什么第二个if-clause甚至执行?
do while (ii .le. nri .and. ed(ii) .le. e1)
! do some stuff...
ii = ii + 1
end do
其中ii
和nri
是标量整数,e1
是标量真实的,ed
是长度nri
的真正的数组。我希望在最后一次运行后发生的是自ii.le.nri
返回.false.
第二个条件从未测试过,我没有得到任何错误的问题。我用调试器验证过ii.le.nri
确实确实返回.false.
- 但程序崩溃了。
为了验证我的假设条件只有一个测试,我甚至写了一个小的测试程序,这是我用相同的编译器选项编译:
program iftest
implicit none
if (returns_false() .and. returns_true()) then
print *, "in if block"
end if
contains
function returns_true()
implicit none
logical returns_true
print *, "in returns true"
returns_true = .true.
end function
function returns_false()
implicit none
logical returns_false
print *, "in returns false"
returns_false = .false
end function
end program
运行这个程序的输出,如我所料,仅
$ ./iftest
in returns false
并退出。第二个测试永远不会运行。
为什么这不适用于我的do while
子句?
当II == NRI那么第二个条件将受到考验,因为你要在第二个状态测试花车那可能会导致问题不可能吗? – James 2013-04-22 17:43:05
@ Kells1986:是的 - 这也是我必须解决的问题。然而,在这种情况下,我已经用调试器验证过这不是问题;当'ii == nri'时,程序崩溃时出现错误的错误,而不是下一次运行(这将是比较实数的问题)。 – 2013-04-22 18:37:16
@ Kells1986:另一方面(在对此事进行了一些思考之后):实数总是会有大约10^-4的相对差异,我使用的是64位实数 - 这绝不应该受四舍五入错误问题影响。 – 2013-04-22 19:19:17