fortran条件语句如何处理浮点数据类型?

时间:2014-03-13 18:24:13

标签: fortran

我有一个简单的if条件语句,它比较两个实数(一个是从导入模块中分配和初始化的数组中读取的),当它不应该失败时。

在什么情况下会发生这种情况?

我正在使用英特尔编译器。

修改: 为了进一步澄清,我正在做这样的事情:

if (12.2272 >= -5.0000) then
  do something
else
  print *, 'fail'
endif

我得到了fail。当我仅使用>而不是>=进行评估时也是如此。

1 个答案:

答案 0 :(得分:1)

通常,您可以仅使用一些容差来可靠地比较浮点数,因为它们固有的不精确性。一般情况下,除了一些特殊情况外,你不应该比较相等,例如将直接读取值与一些小整数(通常为0)进行比较。

如果您使用其中一个数字进行任何非平凡计算,请不要比较相等。有了一些容差,你可以使用:

if (abs(a-b)<eps) ...

其中eps是一些小数字。它可以是epsilon内在函数结果的一些(甚至很大)倍数。

阅读有关浮点的文章很有用,例如http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

您可以尝试这个小程序来查看浮点数的典型问题

real x
integer i

x = 0
do i = 1,10
   x = x + 0.1
end do

print *, x, x==1

end