Math.min()和if条件之间的区别

时间:2015-10-16 09:46:03

标签: java

获得最小数量的最佳方式是什么,哪种方式提高了性能,或者两者都与性能方面相同?

获得两个数字之间的最小距离的一种方法:

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);

2 个答案:

答案 0 :(得分:4)

如果您处理的是正数,不等于NaN-0.00.0,那么应该没有太大区别。

Java 8中的Math.min源代码中的以下内容强调了以下差异:

  

如果任一值为NaN,则结果为NaN。与数值比较运算符不同,此方法将负零视为   严格小于正零。如果一个参数为正零   另一个是负零,结果是负零。

所以Math.min可能稍微效率低,因为它会检查NaN-0.0 vs 0.0,但它可以说更具可读性 - 您需要首先考虑特殊情况是否适用,然后再考虑可读性与(之后如此轻微)性能差异。

我个人会使用Math.min,但那是我自己的意见。

答案 1 :(得分:1)

Java Math#min(double, 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并不关心任何这些。