Erreur étrange avec flottants - Python - Programmation
Marsh Posté le 29-04-2006 à 16:07:12
et bien c'est juste que c'est comme ça. le résultat est tout à fait correct. surcharge __eq__ pour prendre en compte une certain approximation.
http://www.wldelft.nl/soft/d3d/intro/misc/goldberg.pdf
Marsh Posté le 29-04-2006 à 16:13:57
0. Quel est l'intérêt de passer par x.__divmod__(y) quand il y a une fonction divmod(x, y) built-in?
1. Tu n'as pas donné l'intégralité de la classe, tu n'as pas donné la méthode __str__ de Point que tu as définie, elle te permettrait pourtant de savoir où est le "problème"
2. As tu surdéfini __eq__?
3. affiche p.x et p.y après avoir utilisé magnetize, tu vas très vite voir où est le problème
4. http://cch.loria.fr/documentation/ [...] ldberg.pdf
5. help(decimal.Decimal)
Taz a écrit : et bien c'est juste que c'est comme ça. le résultat est tout à fait correct. surcharge __eq__ pour prendre en compte une certain approximation. |
Ou bien alors il passe par le point 5
Marsh Posté le 29-04-2006 à 16:25:56
1. Oups j'avais pas vu
2. Non
3. Bah non, justement on voit pas de différence (troncature auto)
4. Merci pour la doc
5. Je vais plutôt surdéfinir __eq__
Merci à tous les deux
Marsh Posté le 29-04-2006 à 16:31:28
fafounet a écrit : 2. Non |
Dans la mesure où par défaut __eq__ teste sur l'identité, tu ne pouvais donc de toute façon pas avoir une réalisation de ton test d'égalité
fafounet a écrit : 3. Bah non, justement on voit pas de différence (troncature auto) |
Ben j'aimerais bien connaître tes réglages, parce que moi je la vois la différence
Code :
|
fafounet a écrit : 5. Je vais plutôt surdéfinir __eq__ |
Il faut le surdéfinir en testant sur un epsilon dans ce cas, donner simplement (self.x == other.x and self.y == other.y) ne passera pas si tu restes en floating point (avec Decimal ça marcherait par contre, c'est du Fixed Point)
Marsh Posté le 29-04-2006 à 16:36:33
OK c'est pasque j'utilisais print que cela ne m'affichait pas tout.
Marsh Posté le 29-04-2006 à 15:51:28
Salut,
J'ai écrit une fonction magnetize qui doit magnetiser un point sur une grille.
Après plusieurs tests concluant en voici un dont je ne comprends pas l'orgine de l'erreur :