Comment comparer cette séquence de doubles qui sont toutes "approximativement égales" en Java?
J'ai une méthode en java qui renvoie un nombre double et je veux comparer tous les doubler le nombre qui est renvoyée chaque fois que j'appelle la méthode(5 fois), de sorte que je peux en conclure que le nombre retourné est presque la même à chaque fois.
Comment puis-je faire cela?
source d'informationauteur FranXh
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord décider ce que "presque la même chose". Par exemple, il y a une méthode dans
java.lang.Math
appelé ulp() qui, étant donné un double, renvoie la distance entre le double et l'autre; c'est à dire, la plus petite différence possible entre ce nombre et à tous les autres. Vous pourriez vous suffit de comparer la différence entre les deux doubles et le résultat de l'appel à cette méthode.D'autre part, vous voudrez peut-être deux nombres pour juste être dans les 1% de eachother. Dans ce cas, faire le même calcul, mais utiliser le premier nombre, multiplié par
0.01
au lieu deulp()
comme la plus grande distance acceptable.Où le bpa est la mesure de l'égalité.
Approximative de l'égalité est définie en termes de la valeur absolue de la différence: si la valeur absolue de la différence ne dépasse pas un certain, sans doute de petites, de nombre, alors vous pouvez dire que les valeurs comparées sont "assez près".
Vous devez être très prudent de ne pas confondre "assez près" fin "est égal à", parce que les deux sont fondamentalement différentes: l'égalité est transitive (c'est à dire a==b et b==c implique que a==c), alors que "assez proche" n'est pas transitive.
Cela dépend de ce que tu veux dire par similaires. Si vous voulez comparer deux nombres à l'intérieur de l'erreur absolue par exemple 1e-6 vous pouvez utiliser epsilon. Si vous voulez comparer deux
double
quelle que soit l'échelle. par exemple, 1.1 e-20 et 1,3 e-20 ne sont pas similaires mais 1.1e20 et 1.1e20+1e5 vous pouvez comparer la valeur brute.imprime
Ce que signifient-ils pour les deux doubles pour être "à peu près égale?" Cela signifie que les doubles sont dans une certaine tolérance de l'autre. La taille de cette tolérance, et si cette tolérance est exprimée en valeur absolue ou en pourcentage de la deux doubles, dépend de votre application.
Par exemple, deux photos affichées sur une visionneuse de photos ont environ la même largeur en pouces si ils prennent le même nombre de pixels sur l'écran, de sorte que votre tolérance au nombre calculé en fonction de la taille de pixel de votre écran. D'autre part, deux établissements financiers, les bénéfices sont probablement "environ égal" s'ils sont à moins de 0,1% de l'autre. Ce sont juste des exemples hypothétiques, mais le point est qu'il dépend de votre application.
Maintenant, pour certains, la mise en œuvre. Disons que votre application appelle une tolérance absolue. Ensuite, vous pouvez utiliser
de comparer les deux doubles, et l'utilisation
de comparer cinq doubles.
Vous pouvez utiliser Goyave et
DoubleMath#fuzzyEquals
méthode (depuis la version 13.0):Lien vers les docs: https://google.github.io/guava/releases/17.0/api/docs/com/google/common/math/DoubleMath.html