2010-09-15 7 views
3

J'ai une liste de valeurs doubles dont je ne connais pas la plage de et je veux trouver la valeur maximale. Cependant, la fonction Math.max donne un résultat curieux pour cet exemple de code:Math.max semble renvoyer la mauvaise réponse

double a = -100.0; 
double maxA = Double.MIN_VALUE; 
maxA = Math.max(maxA, a); 
System.out.println(maxA); 

Et la sortie est:

4.9E-324 

Donc, pour une raison quelconque, Double.MIN_VALUE est considéré comme le maximum lorsque comparé à -100,0.

Pourquoi?

+1

Merci pour les réponses! Ce dont j'ai besoin est double maxA = -Double.MAX_VALUE; –

+1

peut-être accepter la réponse qui correspond à vos besoins? –

+1

Vous avez besoin de Double.NEGATIVE_INFINITY. – starblue

Répondre

15

MIN_VALUE est:

Une constante en maintenant la plus petite valeur non nulle positif de type double, 2^(- 1074).

Pas le le plus négatif valeur possible.

+1

Ah oui, merci! Je n'ai même pas remarqué que c'était la plus petite valeur positive non nulle. J'ai juste supposé que ce serait la plus petite valeur négative. –

+6

Le problème avec cette définition est qu'elle est incompatible avec les types entiers, où MIN_VALUE est en effet la plus petite valeur possible. – starblue

0

Son assez évident -100 est inférieur à 4,9E-324

-100 , -99 ..... -1 , 0 , 4.9E-324 , 1 , 2 , 3...... 
+8

Seulement si vous connaissez la notation scientifique. – Mizipzor

+3

bien si vous ne le faites pas, c'est maintenant un super moment pour apprendre –

0

MIN_VALUE A maintenant constante la valeur non nulle positif le plus petit de type double.

Notez la valeur "positive".

Vous comparez avec une valeur négative est 1> -1.

Questions connexes