2012-04-29 30 views
2

如何找到雙精度數組中最小的正數(非零)?例如,如果數組包含0.04,0.00010.0,我想返回0.0001找到最小值但爲零

下面的函數是好的,但它會返回零作爲min,這不是我的興趣。

static double[] absOfSub = new double[100]; 
... 

private static double compare(double[] ds) { 
    double min = absOfSub[0]; 

    for (double d : ds) { 
    min = Math.min(min, d); 
    } 
    return min; 
} 

如何讓它忽略零?

+2

爲什麼是錯誤的?在我看來,就像陣列中最低的數字。 – MByD 2012-04-29 05:04:47

+0

@BinyaminSharet你向下滾動?是不是比7.719277021974478E-73小? – lonesome 2012-04-29 05:07:38

+0

不不不不不,不,不,EX'中X越大,數字越小......這是科學記數法...... – MByD 2012-04-29 05:08:43

回答

5

您可以檢查零:

double min = Double.MAX_VALUE; 
for (double d : ds) 
{ 
    min = (d == 0) ? min : Math.min(min, d); 
} 
+0

不應該是** Double.MIN_VALUE **? – lonesome 2012-04-29 04:50:49

+1

不是。如果以'Double.MIN_VALUE'開頭,那麼無論數組包含什麼內容,總會得到它('Double.MIN_VALUE'),如果以'Double.MAX_VALUE'開頭,則會得到最低的陣列。 – MByD 2012-04-29 04:54:02

+0

你可以看看我的編輯? – lonesome 2012-04-29 05:03:20