2010-09-15 37 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。