Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fortran条件语句如何处理浮点数据类型?_Fortran - Fatal编程技术网

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

fortran条件语句如何处理浮点数据类型?,fortran,Fortran,我有一个简单的if条件语句,它比较两个实数(一个是从导入模块中分配和初始化的数组中读取的),但在不应该的时候失败了 在什么情况下会发生这种情况 我正在使用英特尔编译器 编辑: 为了进一步澄清,我正在这样做: if (12.2272 >= -5.0000) then do something else print *, 'fail' endif 我的失败了。当我仅使用而不是=进行计算时,情况也是如此。通常,由于浮点数固有的不精确性,您只能使用一些公差可靠地比较浮点数。一般来说,除了

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

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

我正在使用英特尔编译器

编辑: 为了进一步澄清,我正在这样做:

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

我的
失败了
。当我仅使用
而不是
=

进行计算时,情况也是如此。通常,由于浮点数固有的不精确性,您只能使用一些公差可靠地比较浮点数。一般来说,除了一些特殊情况外,根本不应该进行相等性比较,例如将直接读取的值与一些小整数(通常为0)进行比较

如果您使用其中一个数字进行了任何非平凡的计算,则根本不要比较等式。通过一定的公差,您可以使用:

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

通常情况下,比较失败的原因是程序员没有完全理解正在发生的事情。如果看不到你的代码,我不会冒险做任何其他猜测。是的,我不明白,这就是我提出这个问题的理由。我添加了一些伪代码来描述我的问题。谢谢你的帮助!您发布的伪代码应该
执行一些操作
。但您的问题描述,特别是表示从导入模块中分配和初始化的数组中读取一个的位,使我怀疑分配和初始化没有按照您的预期工作。我仍然认为问题源于您(错误地)认为是正确的部分代码,但我仍然无法进一步提供帮助。从另一个模块读入的分配数组在我正在使用的代码中广泛使用,没有任何问题(据我所知),但在我的场景中,它似乎是错误的。我已经用
print
语句等检查了所有功能,直到出现故障,所以我只是希望条件语句和分配的实变量存在一些已知问题。很难将我的代码压缩到适合这种情况的长度和清晰度。再次感谢。
real x
integer i

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

print *, x, x==1

end