Bonjour,
J’essaye de reconstituer la fonction sqrt
du module math par mes propres moyens pour comprendre comment elle fonctionne.
Voici mon modèle :
def sqrt(x):
cf = 20
resultat = 0
e = nb_chiffres(x)
while True: #simule une boucle do...while
e -= 1
print(e)
i = 0
while (resultat + (i+1)*10**e)**2 < x and i <= 9:
i += 1
resultat += i*10**e
if resultat + i*10**e == resultat and i != 0 or e == -20: #soit on a saturé l'espace mémoire alloué au nombre, soit on atteint une sécurité
break
return resultat
Il fonctionne plutôt bien, mais il y a quelque chose qui me chiffonne…
Quand j’exécute ma fonction avec 2 en argument, j’obtiens 1.414213562373095, mais la fonction du module math retourne 1.4142135623730951. En creusant un peu, j’ai découvert qu’en fait, le nombre trouvé par mon algorithme était 1.414213562373094999…, mais que Python arrondissait parce qu’il n’avait plus la place.
Je n’arrive pas à comprendre pourquoi il réagit comme ça…
Merci d’avance pour votre aide,
+0
-0