2015-10-16 2 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'. И еще один в первом 'if'-состоянии. – luk2302

+1

Используйте то, что делает ваш код более удобным для отслеживания и обслуживания. Разница между использованием 'if' и использованием' Math.min' не повлияет на вашу производительность. – khelwood

+0

должен в первом случае читать 'if (distance vikingsteve

ответ

4

Если вы имеете дело с положительными числами, не равен до NaN, -0.0 или 0.0, тогда не должно быть большой разницы.

В следующем из Math.min исходного кода в Java 8 выделяет следующие отличия:

Если какое-либо значение NaN, то результатом является NaN. В отличие от операторов численного сравнения этот метод считает отрицательным ноль , строго меньшим положительного нуля. Если один аргумент положительный ноль , а другой отрицательный ноль, результат отрицательный ноль.

Так Math.min может быть немного менее эффективен, так как он проверяет NaN и -0.0 против 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 все равно.

Смежные вопросы