Serie de Seno(x) en Python calcula correctamente hasta sen(35)... por qué?

Iniciado por Daor02, 20 Enero 2017, 21:15 PM

0 Miembros y 1 Visitante están viendo este tema.

Daor02

Buenas! Paso a preguntar algo que no he podido entender. Estoy tratando de resolver un programa en Python que le pide al usuario un número x, a partir del cuál se va a hallar el sen(x) de ese número, en radianes, pero sin usar librerías sino siguiendo la serie matemática de:

sen(x) = (x^1)/1! - (x^3)/3! + (x^5)/5! ... (+-) (x^n)/n!

Además, el programa tiene que parar cuando la diferencia entre la serie y un nuevo término sea menor o igual a 0.001.

Así, este es el código que he hecho:

Código (python) [Seleccionar]
import math

x = float(input("Ingrese x: "))

exp = 1
senox = 0
comparacion = 1
i = 1

while math.fabs(comparacion - senox) > 0.001:

    comparacion = senox

    if i % 2 == 0:

        senox -= (x**exp) / math.factorial(exp)

    else:

        senox += (x**exp) / math.factorial(exp)

    exp += 2
    i += 1

print ("ANS:",senox)


Y funciona! Para los primeros 35 valores el resultado es bastante aproximado. Aun así, de ahí en adelante los resultados se van muy lejos de lo que en realidad son. Por ejemplo, si coloco x=45, me dice que sen(45) = -302.99513662655323, siendo que sen(45) es en realidad igual a 0.851... y no entiendo por qué? Alguno tiene alguna idea de por qué pueda pasar?

Un saludo! Gracias!

(A propósito, después del número 61 deja de calcular debido a que los números son muy grandes! Error: OverflowError: int too large to convert to float)

:silbar: :silbar: :silbar:

ivancea96

Esa es una seriede taylor https://es.wikipedia.org/wiki/Serie_de_Taylor
Es solo una aproximación, y llega un punto donde da valores que no se aproximan.
Afortunadamente, las funciones trigonométricas se repiten a partir de 2*PI, así que podrías coger los valores siempre del intervalo [0, 2*PI)