与常量比较时奇怪的fortran数字行为

时间:2014-07-22 17:32:06

标签: if-statement fortran real-datatype

所以我在Fortran中有这个代码:

REAL*8 DELTA,XI,SO,S
SO=0.273333328465621
S=0.323333333556851
XI=0.01
DELTA =SO-S                ! DELTA = -0.0500000050912297
IF(DELTA.GE.0.0)XI=XI/10

带有这些值的代码总是最终将IF评估为真并执行XI除法(即XI = 0.001之后。我认为这是一种奇怪的行为,但我的工作是在C#中复制该行为。

使用intel fortran编译,没有优化和完整的调试信息作为32位DLL的一部分

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

以下内容不执行IF语句。两者都有gfortran和ifort。

program test_delta

double precision DELTA
DELTA = -0.0500001
IF (DELTA .GE. 0.0) then
    write (*, *) "IF-statement executed"
ENDIF

end program test_delta

一个变化是我在IF语句中添加了预期的“then”。否则两个编译器都会发出错误消息。