为什么Java的双/浮点Math.min()以这种方式实现?
我正在查看 源代码中的一些内容,我注意到虽然(或其长对应物)是这样实现的:java.lang.Math
Math.min(int, int)
public static int min(int a, int b) {
return a <= b ? a : b;
}
这对我来说是完全有意义的,这与我要做的事情是一样的。但是,双/浮点实现是这样的:
public static float min(float a, float b) {
if (a != a) {
return a;
} else if (a == 0.0F && b == 0.0F && (long)Float.floatToRawIntBits(b) == negativeZeroFloatBits) {
return b;
} else {
return a <= b ? a : b;
}
}
我完全傻眼了。与自身相比?第二次检查甚至是什么?为什么它没有以与int/long版本相同的方式实现?a