Somme qui déclenche une division par zéro

Résolu/Fermé
Clemarze Messages postés 2 Date d'inscription mercredi 15 février 2023 Statut Membre Dernière intervention 16 février 2023 - Modifié le 16 févr. 2023 à 15:15
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 16 févr. 2023 à 16:12

Bonjour,

J'ai cet exercice à réaliser :

Donner la valeur approchée avec au moins 5 chiffres significatifs de S_{{610}} où

\displaystyle S_N=\sum_{k=1}^N {-\frac{\sin \left( 3.0\cdot k \right)}{k}}

Voici mon programme :

import math

S1 = 1
i = 1
for i in range(610):
  S1 = S1 + (-math.sin(3 * i) / i)
print(S1)

Mais je ne comprends pas mon erreur. Serait-il possible de me dire où elle est s'il vous plaît ?

En vous remerciant !

A voir également:

4 réponses

yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 Ambassadeur 1 556
16 févr. 2023 à 15:09

bonjour,

C'est quoi, "mon erreur"?

Quand tu partages du code, merci de tenir compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Si tu veux comprendre ce que fait ton code, tu pourrais ajouter print(i) dans ta boucle.

0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
16 févr. 2023 à 15:14

Bonjour,

Si je lance ton code j'obtiens :

In [1]: import math
   ...: 
   ...: S1 = 1
   ...: i = 1
   ...: for i in range(610):
   ...:   S1 = S1 + (-math.sin(3 * i) / i)
   ...: print(S1)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In [7], line 6
      4 i = 1
      5 for i in range(610):
----> 6   S1 = S1 + (-math.sin(3 * i) / i)
      7 print(S1)

ZeroDivisionError: float division by zero

On voit que la seule division est "/ i" et effectivement en itérant sur range(610), tu itères sur les valeurs {0, 1, 2, ... 609}.

Il faut donc itérer sur range(1, 611) pour considérer les valeurs {1, 2, ... 610}.

Bonne chance

0

J’ai rajouté un print à mon programme et cela me dit que la division n’est pas bonne et qu’on ne peux pas diviser par un flotant. Je ne m’y connais pas trop je ne sais pas comment remédier à ce problème ? 

0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
16 févr. 2023 à 16:12

Peux-tu reporter l'erreur exacte (avec un copier coller) et indiquer quelle version de python tu utilises ? Si tu es en python2 je t'invite à passer en python3. Car comme tu peux le voir ci-dessous, il ne devrait pas y avoir d'erreur

(mando@silk) (~) $ ipython3
Python 3.10.9 (main, Dec  7 2022, 13:47:07) [GCC 12.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import math
   ...: 
   ...: S1 = 1
   ...: i = 1
   ...: for i in range(1, 611):
   ...:   S1 = S1 + (-math.sin(3 * i) / i)
   ...: print(S1)
0.9283835846497664

Bonne chance

0