sum为零给出0. ifort和3.1225e-16与gfortran

时间:2013-10-09 13:20:48

标签: fortran gfortran intel-fortran

我想知道gfortran是否有特定选项,以便将以下总和包含在i的循环中

startx+(i-iref)*dx

-15+(376-1)*0.04

与gfortran完全相同(与ifort一样)。

这些数字不是整数,定义为

real :: dx=0.04
double precision :: iref=1.d0,startx=-15.
integer i=376 !(classic i of a loop)

[ifort编译用        -O0 -assume byterecl -r8 而gfortran与        -O0 -fdefault-real-8 -fdefault-double-8]

有可能吗?任何提示?

由于

1 个答案:

答案 0 :(得分:1)

只要你对浮点数进行一些算术运算,就没有/几乎没有这样的事情就是零。这主要是由于浮点表示的精度有限。

如果要检查值是否为零,请使用

行中的内容
if ( abs(res) <= 1.e-5 ) then
  write(*,*) 'res=',0.e0
else
  write(*,*) 'res=',res
endif

(这是单精度版本。)