Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/05/2012, 05:45
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Calculo del Seno por Taylor

El programa, en principio, es correcto. El problema lo tienes en la función factorial. La has definido como entera, con valores enteros (32 bits) con signo el rango de que dispones es desde -2^31 a (2^31)-1, es decir, de -2,147,483,648 a +2,147,483,647 (ó 0 a (2^32)-1, 0 a 4,294,967,296 si son enteros sin signo). Al calcular factoriales, tienes 12! = 479,001,600, pero 13! = 6,227,020,800, fuera del rango de un entero de 32 bits (con o sin signo). Es decir, con la función factorial como entera, puedes llegar a 12!. En tu programa, dado que haces fact(2*n+1), esto te limita el valor de k a un máximo de 5 (2*5+1=11, pero 2*6+1=13, fuera de alcance).

Por ello, en el primer y segundo cuadrante, con valores del ángulo relativamente pequeños, no apreciarás errores importantes en el resultado aún con valores de k de 6 ó 7, pero sí que se hace patente en los otros dos cuadrantes, con valores mayores de ángulo, o con valores de k grandes (ya que en los desbordamientos de enteros se pìerden los bits más significativos, y lo que queda puede interpretarse como un número pequeño, o incluso negativo).

Soluciones:
Puedes llegar a 20! (k=9 en tu programa, para 19!) si dispones de un tipo entero de 64 bits.
Puedes llegar a 33! (k=16 en tu programa) si implementas la función como float.
Puedes llegar a 170! (k=84 en tu programa) si implementas la función como double.