我正在用FORTRAN编写一个有些特殊的程序。我只能使用整数变量,如你所知,当你试图计算大于12或13的阶乘时,就会出现内存溢出的问题。因此,我制作了这个程序来避免这个问题:
http://lendricheolfiles.webs.com/codigo.txt
但是出现了一些非常奇怪的问题。该程序可以正确计算4或5次阶乘,然后就出现了内存溢出的消息。我正在使用Windows 8,我担心它可能是故障的原因,或者是我做错了什么。
谢谢。
谢谢。
cifra - 1 == 0
超出了边界:do cifra=ncifras,1,-1
factor(1,cifra-1) = factor(1,cifra)/10 ! factor is (1:2, 1:ncifras)
factor(1,cifra) = mod(factor(1,cifra),10)
enddo
! :
! Same here:
do cifra=ncifras,1,-1
factor(2,cifra-1) = factor(2,cifra)/10
factor(2,cifra) = mod(factor(2,cifra),10)
enddo
!:
do cifra=ncifras,1,-1
sumaprovisional(cifra-1) = sumaprovisional(cifra-1)+(sumaprovisional(cifra)/10)
sumaprovisional(cifra) = mod(sumaprovisional(cifra),10)
enddo
cifra - (fila - 1)
的值超出了范围:do fila=1,nfilas
do cifra=1,ncifras
! Out of bounds for all cifra < fila:
sumando(fila,cifra-(fila-1)) = factor(1,cifra)*factor(2,ncifras-(fila-1))
enddo
sumaprovisional = sumaprovisional+sumando(fila,:)
enddo
do cifra = ncifras, 2, -1
,并将另一种情况的内部循环重写为do cifra = fila, ncifras
,那么您应该没问题。此外,在您发布的示例程序中,您必须先正确分配resultado
,然后再将其传递给子程序。
integer
变量时,不会出现 _memory overflow_,而是会出现 _integer overflow_。 - Hristo Iliev