Calculatrice qui fait des erreurs.
Kyro
Membre
Bonjour à tous,
tout d'abord désolé si j'ai posté mon topic dans la mauvaise section, je suis nouveau ici.
Je débute en Obj-c est viens de réaliser une calculatrice toute bête avec Xcode/Application builder.
Tout fonctionne .. sauf ... sauf ... sauf, les calcules sur des chiffres à virvules.
Par exemple 2.33 + 2.33 me revoit 4.6599999999
Je n'ai aucune idée d'où cela peut venir. Sachat que je génère mes nombres de la manière suivante :
* entier : entier*10+unité
* flotant : entier+chiffre/10^une_puissance
Quelqu'un saurait-il d'où pourrait venir mon problème ?
tout d'abord désolé si j'ai posté mon topic dans la mauvaise section, je suis nouveau ici.
Je débute en Obj-c est viens de réaliser une calculatrice toute bête avec Xcode/Application builder.
Tout fonctionne .. sauf ... sauf ... sauf, les calcules sur des chiffres à virvules.
Par exemple 2.33 + 2.33 me revoit 4.6599999999
Je n'ai aucune idée d'où cela peut venir. Sachat que je génère mes nombres de la manière suivante :
* entier : entier*10+unité
* flotant : entier+chiffre/10^une_puissance
Quelqu'un saurait-il d'où pourrait venir mon problème ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le problème vient sans doute de la manière dont tu effectues les calculs. Donne-nous un exemple de code.
voici comme je génère mes nombres :
les opérations je les obtient tout bêtement avec cette fonction :
En décimal:
Mais sur un ordinateur, les nombres sont stockés dans la mémoire en binaire (base 2). Ceci implique que tout est une somme de puissance de 2.
Si tu convertis 2,33 en une somme de puissances de 2:
Pour certains nombres, il faudrait un nombre infini de chiffres pour les décrire en binaire. D'où l'erreur que tu observes.
Pour améliorer la précision, tu peux utiliser un type plus précis, long double, mais le problème sera toujours présent. Il faudrait utiliser d'autres algorithmes qui travaillent en base 10.
Note que les fonctions de <math.h> travaillent sur des doubles.
Merci pour la librairie, je vais aller y jeter un coup d'oeil.
https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/NumbersandValues/Articles/DecimalNumbers.html
strtod
et tu as même le source strtod.c pour voir comment ils font