我打电话给gges,我想得到特征值。在应用说明中,我阅读了此免责声明:
商数字alphar(j)/ beta(j)和alphai(j)/ beta(j)可能容易上溢或下溢,而beta(j)甚至可能为零。因此,您应该避免简单地计算比率。然而,alphar和alphai总是小于且通常与范数(A)相当,并且beta总是小于且通常与范数(B)相当。
我想防止上溢或下溢并停止程序并出现错误:
do i=1,N
if (sometest(alphar(i), beta(i)) then
stop 'Eigenvalues over- or underflow!'
endif
Lambda(i) = alphar(i)/beta(i)
enddo
提前致谢
答案 0 :(得分:1)
溢出意味着,结果大于巨大,因此有些测试可能是:
abs(alphar(i)) > abs(beta(i))*huge(alphar(i))
对于下溢,结果将小于微小,因此一些测试可能是:
abs(alphar(i)) < abs(beta(i))*tiny(alphar(i))
巨大而微小的内在功能。
编辑:实际上第二个想法是溢出的测试可能不太好,因为如果abs(beta(i))大于1,乘法本身会导致溢出。因此你需要捕获它。如果beta小于1,则只能进行溢出测试,只有小于1时才能进行下溢测试。