2015-10-16 113 views
0

什麼方法可以獲得最小數量,哪種改進了性能或兩者與性能相同?Math.min()之間的區別以及如果條件爲

一種方式來獲得最小距離之間的兩個數字:

double minDistance = Double.MAX_VALUE; 
double distance = coordinate1.distnaceTo(coordinate2); 

if(distnace < minDistance) { 
    minDistance = distance; 
} 

另一種方式來獲得之間的兩個數的最小距離:

double minDistance = Double.MAX_VALUE; 
double minDistance = Math.min(coordinate1.distnaceTo(coordinate2), minDistance); 
+1

請注意,第二個不會編譯,因爲您已經定義了'minDistance'。而且'distnaceTo'中有一個錯字 - 應該是'distanceTo'。還有第一個「如果」條件。 – luk2302

+1

使用任何一個代碼都可以更容易地遵循和維護。使用'if'和使用'Math.min'的區別不會影響你的性能。 – khelwood

+0

第一個案例應該讀取'if(distance vikingsteve

回答

4

如果你正在處理的正數,不等於到NaN-0.00.0,那就不應該有太大的差別。

從Java中8 Math.min源代碼下面突出了以下差異:

如果任一值是NaN,則結果是NaN。與數值比較運算符不同,該方法認爲負零點嚴格小於正零點。如果一個參數是正的零點 而另一個是負的零點,則結果爲負零。

所以Math.min可能效率較低,因爲它會檢查NaN-0.0 VS 0.0,但它可以說是更具可讀性 - 你需要首先考慮的特殊情況下是否適用與否,然後可讀性之後的VS(非常小)性能差異。

我個人會使用Math.min,但那是我個人的意見。

1

的Java Math#min(double, double)執行以下操作:

  • 返回較小的兩個雙值。也就是說,結果是更接近負無窮的值。
  • 如果參數具有相同的值,則結果是相同的值。
  • 如果任一值爲NaN,則結果爲NaN
  • 如果一個參數爲正零而另一個爲負零,則結果爲負零。

看看在source

public static double min(double a, double b) { 
    if (a != a) return a; // a is NaN 
    if ((a == 0.0d) && (b == 0.0d) && (Double.doubleToLongBits(b) == negativeZeroDoubleBits)) { 
     return b; 
    } 
    return (a <= b) ? a : b; 
} 

這裏是你實現:

if(distnace < minDistance) { 
    .... 
} 

所以,是你的代碼是一個點點比Math.min(),因爲它檢查速度更快一些附加條件,NaN,否定性而你的if-else不關心任何這些。

相關問題