2010-09-15 105 views
3

我有一个双值列表,我不知道的范围,我想找到最大值。然而,Math.max功能是给一个奇怪的结果,这个示例代码:Math.max似乎回来了错误的答案

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

,输出是:

4.9E-324 

所以,出于某种原因,Double.MIN_VALUE被认为是最大的时候相比-100.0。

为什么?

+1

谢谢你的答案!我需要的是double maxA = -Double.MAX_VALUE; – 2010-09-15 12:51:05

+1

也许接受适合您的需求的答案? – 2010-09-15 12:54:53

+1

您需要Double.NEGATIVE_INFINITY。 – starblue 2010-09-15 17:32:54

回答

15

MIN_VALUE是:

的常量保持的最小正非零double类型的值,2 ^( - 1074)。

不是最负面可能的价值。

+1

啊,是的,谢谢!我甚至没有注意到它是最小的非零正值。我只是假设它实际上是最小的负值。 – 2010-09-15 12:47:33

+6

该定义的问题是它与整数类型不一致,其中MIN_VALUE确实是最小的可能值。 – starblue 2010-09-15 17:31:58

0

它相当明显-100小于4.9E-324

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

只有您知道科学记数法。 – Mizipzor 2010-09-15 12:50:11

+3

好,如果你不这样做,现在是一个超级学习的时间 – 2010-09-15 23:00:34

0

MIN_VALUE的常量保持的最小正非零double类型的值。

注意“正值”值。

您正在比较它与负值是1> -1。