En comparant float et double des types de données en objective-C
Lors de l'utilisation de double ou float type de données dans une application iPhone, je suis en cours d'exécution à des problèmes avec la ">=" et "<=" comparaisons, car lorsqu'une variable est affectée d'un nombre entré avec une décimale après la virgule, comme 4.2, le float ou double utilisée dans la comparaison peut avoir une valeur telle que 4.1999998092651367. En raison de cette différence, une comparaison telle que ">= 4.2" est false au lieu de true. Comment puis-je éviter ce problème?
- Voir stackoverflow.com/questions/17333/...
- Aussi, eecg.toronto.edu/~moshovos/ECE243-2008/00.pratique/...
- Êtes-vous le problème avec les deux
float
etdouble
variables? S'il vous plaît poster un exemple de code?
Vous devez vous connecter pour publier un commentaire.
Pas peut. sera. Pour être précis:
Le problème vient quand vous écrivez quelque chose comme:
f
est exactement4.19999980926513671875
, mais vous êtes en les comparant à la double précision littérale "4.2", qui a la valeur4.20000000000000017763568394002504646778106689453125
, de sorte que la comparaison échoue. Si, au lieu de vous comparer à la simple précision littérale "4.2 f":la comparaison réussit, car les valeurs sont exactement égaux. À virgule flottante est compliqué, mais c'est entièrement déterministe, l'une des choses les plus simples que vous pouvez faire pour le rendre plus intuitif est de ne pas mélanger des précisions. Si vous travaillez avec
float
, assurez-vous que tous vos littéraux sont suffixé avecf
pour faire simple précision, trop.(Cela peut également améliorer les performances, mais ce n'est pas la raison de le faire; la raison de le faire c'est parce qu'il permet de rendre votre code plus correct).
long double
littéraux sont suffixé avecl
ouL
.