martes, 28 de diciembre de 2010

Matlab con problemas para resolver productos grandes

Resolver problemas del proyecto Euler se ha vuelto un hábito diario y más al descubrir que la ir avanzando en la lista los problemas se ponen cada vez más interesantes, sin embargo hay algunos de solución realmente simple, la cuestión esta en darle la mejor mirada para evitar un algoritmo de fuerza bruta que consuma demasiado tiempo de procesamiento cuando no sea estrictamente necesario (aunque este tipo de algoritmos es bueno crearlos porque dejan abierto el código a variaciones interesantes).

Sin embargo, y aunque continúo resolviendo problemas, hoy quiero comentar algo muy curioso que encontré ayer al procurar resolver el problema 20 que propone determinar la suma de todos los dígitos del valor 100!, algo realmente fácil de trabajar ya que utilizando la función num2str y su inversa str2num se puede construir un vector con la cadena de vectores y sumar todas las entradas de este vector, el error apareció al obtener el resultado final ya que no coincide con el calculado en mi calculadora (Texas Instruments Voyage 200).

Después de un tratamiento riguroso de la cuestión encontré lo siguiente:

Texas Instruments Voyage 300
Resultado de la operación
50*49*48*47*46*45*44*43*42*41*40*39
Es
58150627116341760000
Matlab R2008b (GNU/Linux Debian Squeeze)
Resultado de la misma operación
58150627116341755904

y a partir del 39, el factorial de 100 cambia con respecto a los resultados obtenidos tanto en calculadora como a pedal (comprobación manual realizada).

Explicación???
Ojalá hubieran respuestas.

esDebian

0 comentarios:

Publicar un comentario en la entrada