繁体   English   中英

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

[英]Difference between Math.min() and if condition

最好的方法是获得最小的数量,哪种方法可以提高性能,或者两者都与性能相同?

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

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

如果要处理正数,不等于NaN-0.00.0 ,则应该没有太大的区别。

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

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

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

我个人将使用Math.min ,但这是我自己的观点。

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

  • 返回两个double值中的较小者。 即,结果是接近负无穷大的值。
  • 如果参数具有相同的值,则结果为相同的值。
  • 如果任一值为NaN ,则结果为NaN
  • 如果一个参数为正零,另一个为负零,则结果为负零。

看一下来源

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不关心任何这些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM