je vous expose mon problème à travers un exemple. Supposons que je veuille créer un programme qui détermine si un triangle dont on connaît les coordonnées des sommets est rectangle en faisant appel au théorème de Pythagore en python (avec la limite des modules présents sur la Casio graph90+E). Si je n'ai pas fait d'erreur, cela pourrait ressembler à ceci :
- Code: Select all
from math import sqrt
def distance(a, b, c, d):
return sqrt((c-a)**2+(d-b)**2)
def pythagore(a, b, c):
return a**2 == b**2 + c**2 or b**2 == a**2 + c**2 or c**2 == a**2 + b**2
def est_rectangle(x_A, y_A, x_B, y_B, x_C, y_C):
AB = distance(x_A, y_A, x_B, y_B)
BC = distance(x_B, y_B, x_C, y_C)
AC = distance(x_A, y_A, x_C, y_C)
return pythagore(AB, AC, BC)
Or, si nous testons avec O(0;0), I(1;0) et J(0;1), le programme retourne False au lieu de True.
En cherchant un peu, il s'avère que python renvoie :
a ) 2.0 si je tape sqrt(2)**2
b ) False au test suivant : sqrt(2.0)**2 == 2.0
c ) 4.440892098500626 * 10 ^(-16) si je tape sqrt(2)**2 - 2.0
Ce dernier point explique tout, sqrt(2)**2 ne renvoie pas 2.0 mais 2.000000000000000444....
Ma question est la suivante : comment pourrait-on contourner ce problème pour continuer à utiliser la racine carrée en Python ? Parce que dans ce cas là, le Casio Basic fonctionne finalement bien mieux...
Merci.
(PS : ce serait pour le niveau seconde)