1 pièce(s) jointe(s)
problème de calcul de sinus d'un float ne dépassant pas une valeur fixe
bonsoir,
j'ai l'énoncé suivant:
On peut calculer approximativement le sinus de x (voir définition du sinus) en effectuant la sommation des n premiers termes de la série (c'est-à-dire la somme infinie) :
Pièce jointe 458029
où x est exprimé en radians.
On vous demande d'écrire un code qui lit une valeur flottante (float) x en entrée et qui imprime une approximation de sin(x).
Votre code additionne les termes successifs dans la série jusqu'à ce que la valeur d'un terme devienne inférieure (en valeur absolue) à une constante ϵ (prenez ϵ=10−6). Affichez (imprimé) ensuite l'approximation ainsi obtenue.
Attention : Calculer explicitement la valeur des factorielles peut poser des soucis lorsque vous utilisez les valeurs pour des calculs avec des float. Si c'est le cas, pensez à une autre façon de faire !
la solution que j'ai proposé est la suivante mais ça ne donne pas des résultat correcte pour tout les entrées :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import math
def fact(y):
n=1
for i in range(2,y+1):
n*=i
return n
x = float(input())
eps=10e-6
def sin(x):
sin=x-(x**3/fact(3))+(x**5/fact(5))-(x**7/fact(7))
if sin<abs(eps):
return sin
print(sin(x)) |
la solution à ce problème
la solution est la suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11
| from math import factorial
x = float(input())
t, n, s = 1, 0, 0
while abs(t) > 1e-6:
t = (-1)**n * x**(2*n+1) / factorial(2*n+1)
s += t
n += 1
print(s) |