Fortran - Problema en factorial

 
Vista:

Problema en factorial

Publicado por Pablo (1 intervención) el 06/07/2009 14:21:08
Hola,
Tengo una función para calcular el factorial de un numero dentro de una programa. Todo va bien hasta que llega al fatorial de 13, donde me da un resultado erroneo, y partir de hay empieza a darme valores negativos o erroneos. La funcion es la siguiente:

**************************************************************************
C Computes factorial of an integer
C**************************************************************************
C INPUTS:
C n: integer
C OUTPUTS:
C nfact: integer
C**************************************************************************
function factorial(n) result(nfact)
implicit none
integer, intent(in) :: n
integer (SELECTED_INT_KIND (5)) nfact
C integer :: nfact
integer :: h
nfact = 1
print*,'n',n
if (n > 1) then
do h = 2, n
print*,'h',h
nfact = nfact * h
print*,'nfact',nfact
end do
else
nfact=1
endif
print*,'nfact',nfact
end function

Si alguien ve donde puede estar el error lo agradeceria mucho.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema en factorial

Publicado por Paco (2 intervenciones) el 21/07/2009 15:33:52
El problema es que estás utilizando aritmética entera.
Un número entero de 32 bits tiene un rango admisible desde
-2**31 a 2**31-1, es decir, desde -2,147,483,648 a +2,147,483,647.
El factorial de 12 es 479,001,600, y el de 13 es 6,227,020,800, es decir, que con el factorial de 13 ya estas excediendo la capacidad de un entero de 32 bits, y por eso presenta resultados sin sentido.
La solucion es emplear numeros reales, mejor si es en doble precision (en precision simple provocarás desbordamiento con el factorial de 34 ó 35).

Aunque con un poco de retraso, espero que te yaya servido de ayuda (hace poco que dí con este sitio).

Un saludo,

PACO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema en factorial

Publicado por Gustavo (4 intervenciones) el 02/08/2011 12:31:31
No se si ya te han respondido, pero tienes un problema de dimensionalidad, en vez de utilizar INTEGER, debes de utilizar DOUBLE, o DOUBLE PRECISION, esto te aumentará el rango de acción...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar