Fortran问题0 + 0不等于0

时间:2014-12-03 10:40:21

标签: fortran

我决定在这里发帖,因为我的fortran90代码遇到了一个非常奇怪的问题。 实际上,我声明了双精度变量:

double precision, dimension(-1:20,-1:20) :: a,b,c

然后我将所有变量初始化为零,

a(:,:) = 0.d0
b(:,:) = 0.d0
c(:,:) = 0.d0

最后我做了我的计算,

a(1:17,2:18) = a(1:17,2:18) + b(1:17,2:18) + 0.5d0*c(1:17,2:18)

我检查了每个变量,在计算之前它们都等于零但是我得到了,

abs(maxval(a(1:17,2)) - minval(a(1:17,2))) = 4.336808689942018E-019

这没有任何意义,但我不知道问题出在哪里,有人可以帮我解决这个问题吗?

此致

PS:我正在使用带有以下选项的ifort:“-O3 -xHost -vec-report0 -implicitnone -warn truncated_source -warn argument_checking -warn unused -warn declarations -warn alignments -warn ignore_loc -warn usage -check nobounds -ftz“

1 个答案:

答案 0 :(得分:0)

我在MS Visual Studio 2005(英特尔Fortran 11.0.3452.2005)上运行了你的代码片段并获得了0.000000000000000E + 000。 GNU Fortran 4.9.0上的结果相同。

不确定它是否会对您的情况产生影响,但我建议您使用DABS代替ABS。

福斯托