Fortran在运行此命令时返回一条错误消息,指出浮点溢出
program single
implicit none
integer :: n,k
real, dimension(255) :: x
n = 255
x(1) = 1/3.0
x(2) = 1/12.0
do k = 3,n
x(k) = 2.25*x(k-1) - 0.5*x(k-2)
end do
print *,x
end program
经过一些测试,我认为这是由于do循环中的变量索引,但我不太清楚问题是什么 . 谁能帮我?
1 回答
通过在循环期间打印
x
的值,您可以了解正在发生的事情 . 前几个值是注意符号如何变化,值从那里单调增加 . 您可能已经注意到,对于
x
的负值,您定义的序列呈指数级增长,因此一旦您变为负值,指数增长很快就会获得并导致浮点溢出,因为x
只是增长和增长(在100次迭代之后)已超出1E+21
) .但是,让我们看看如果我们通过指定增加浮点精度会发生什么
如果我们现在编译并运行相同的程序,我们会注意到
x(k)
为0以增加k
,但不会在255次迭代中更改符号 . 所以事实上,你看到的溢出是由浮点表示的准确性不足引起的,这导致了错误的符号变化,以及随后的指数增长 .