当我像
gfortran -ffpe-trap=invalid,zero,overflow,underflow ...
我知道该underflow
选项并不总是一个好主意,但我想知道是否可以使用此选项进行乘法运算。事实上,在下面的示例中,我知道可能会发生下溢,但也许我不知道我的代码中有其他情况。这就是为什么我想尽可能保留这个选项。
这是一个示例,其中我为矩阵的每个 x,y 索引计算向量 u;组成这些向量的 2 个值介于 0 和 1 之间。然后我计算其范数的平方。
非常合乎逻辑,由于这个平方运算,我的值会下溢。因为,这些非常小的值对我来说可以被认为是零。有没有underflow
比使用if
比较更好的方法?
implicit none
double :: u(100,100,2), uSqr(100,100)
integer :: x,y
DO x= 1, 100
DO y = 1, 100
CALL Poisin( u(x,y,:), x, y )
ENDDO
ENDDO
uSqr = u(:,:,1)*u(:,:,1) + u(:,:,2) * u(:,:,2) ! where comes the underflow errors