Possible en double:
Manipulating and comparing floating points in javala comparaison des nombres à virgule flottante en Java
Suis-je censé utiliser un Epsilon en comparant les nombres à virgule flottante en Java? Est-ce que la méthode statique Float.compare (float f1, float f2) est sûre à utiliser?
Merci!
EDIT: Je pense que je l'ai eu. Quand j'écris, disons, 3.6f en éclipse, le compilateur interprète ce nombre comme 3.6. Cependant, quand j'écris 1.2f * 3.0f, le résultat est 3.6000001. Alors que mathématiquement c'est faux, ces deux résultats sont évidemment inégaux. D'où la nécessité d'avoir un epsilon tout en vérifiant l'égalité. Cependant, lorsque j'écris 0.0f dans eclipse, le compilateur interprète cela strictement comme 0 parce que IEEE 754 est capable de le gérer correctement. Par conséquent, s'assurer qu'un flotteur est strictement positif avec (valeur> 0.0f) est correct.
Le seul problème que je vois est lorsque l'ordinateur n'utilise pas la représentation IEEE 754, et utilise à la place une représentation qui ne gère pas 0 correctement.
Ai-je raison?
La réponse dépend de ce que vous essayez de faire. En fait, si vous devriez utiliser le point flottant ou non dépend également de cela. Expliquez le problème à la main, seulement alors vous obtiendrez une réponse utile. –
Coffre-fort de quelle manière? C'est une méthode pratique et peut gérer certains cas de bords, mais cela ne nous empêchera pas de créer nos propres bogues. Aussi, j'ai utilisé un epsilon en essayant d'implémenter ma propre méthode d'égalité pour les nombres à virgule flottante, mais pas en les comparant. –
Désolé de ne pas être suffisamment précis. J'écris des particules pour un jeu. Je veux savoir quand deltaTime (float) est égal à 0.0, car je calcule la vitesse en utilisant velocity = distance * (1/deltaTime). Avoir une vitesse infinie est un peu stupide. Pour le moment j'utilise (Float.compare (deltaTime, 0.0f)! = 0) pour m'assurer que deltaTime est supérieur à 0.0. Le deltaTime NE PEUT PAS être inférieur à 0. – Klems