Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1626 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Attention aux nombres flottants

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attention aux nombres flottants

n°2066769
Peuwi
Posté le 29-03-2011 à 12:06:59  profilanswer
 

Juste pour rappeler ici une règle de programmation :
on ne fait jamais de test d'égalité if(a==b) sur un nombre flottant. (donc, les float, doubles, etc)
 
On ne peut le faire que si :
- ils sont arrondis avant (donc dans excel, on peut le faire, puisqu'il arrondi avant les tests). Idem, les BDD arrondissent pour prendre moins de place.
- ils sont représentés en binaire sous la forme de nombres entiers (3,14 = 314*10^-2). C'est moins performant, mais cela n'est pas touché par le problème.
 
Et ca touche tous les langages, parce que ca touche la représentation binaire d'un décimal sur une taille nécessairement finie. (en binaire 0,1=0,0001100110011... 0011 répété à l'infini), et cette représentation est nécessairement faite dans le cpu (si on lui demande de manipuler des flottants)
 
Donc, en résumé :
pas de tests d'égalité de quelque façon que ce soit entre 2 flottants. (de toute façon, cela n'a pas grand sens)
(et accessoirement, arrondi obligatoire avant tout affichage d'un nombre flottant pour l'utilisateur)
 
(j'espère avoir appris un truc à des gens)

mood
Publicité
Posté le 29-03-2011 à 12:06:59  profilanswer
 

n°2067047
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-03-2011 à 11:52:25  profilanswer
 

Bien, mais ça aurait été encore mieux de donner une solution pour comparer des flottants non ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°2067191
h3bus
Troll Inside
Posté le 30-03-2011 à 23:11:52  profilanswer
 

ça ce trouve assez facilement:

Code :
  1. bool AreSame(double a, double b)
  2. {
  3.    return fabs(a - b) < EPSILON;
  4. }
 

Ou sinon une bonne lecture sur le sujet: http://www.cygnus-software.com/pap [...] floats.htm


Message édité par h3bus le 30-03-2011 à 23:15:10

---------------
sheep++
n°2067218
Trap D
Posté le 31-03-2011 à 09:33:53  profilanswer
 

IMO, Harkonnen le savait !

n°2067529
rufo
Pas me confondre avec Lycos!
Posté le 01-04-2011 à 13:53:35  profilanswer
 

ou faire un round en gardant x décimales pour chacun des 2 nbs ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2067588
leonhard
Posté le 01-04-2011 à 16:22:42  profilanswer
 

On peut faire des choses amusantes avec les floats... Par exemple:
 

Code :
  1. while (x == (x+1))
  2. {
  3.     // ici on est dans une boucle infinie ;)
  4.     // il suffit d'avoir la bonne valeur de x
  5. }


 
Si si, parfois avec les float, x est égal à x+1 (je vous laisse chercher la valeur de x mais c'est pas compliqué).
 
Un autre "problème" très connu, c'est la perte de l'associativité des opérations arithmétiques... Parfois, avec les floats on aura que:

Code :
  1. (a + b) + c != a + (b + c)


 
Pour les débutants dans le domaine c'est amusant de trouver pour quelles valeurs de a, b, c on aura cette inégalité. Les programmeurs expérimentés (c'est-à-dire ayant au moins écrit une fois une applic sérieuse utilisant des floats) savent déjà ces choses.


Message édité par leonhard le 01-04-2011 à 16:23:20

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Attention aux nombres flottants

 

Sujets relatifs
Retrouver les nombres qui composent un chiffre en binaire.VBA Excel : Question simple, Textbox stocke des nombres en texte
[Regex] Détecter des nombres entre crochets[Resolu] Bug avec éléments flottants sur mise en page
exercice nombres décroissantsje coince sur une comparaison de nombres
Flottants en CBug avec les nombres réels en AS3
grands nombres en CProblème de tri avec des nombres
Plus de sujets relatifs à : Attention aux nombres flottants


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR