我正在查看 的源代码中的一些内容java.lang.Math,我注意到 while Math.min(int, int)(或其长版本)是这样实现的:
public static int min(int a, int b) {
return a <= b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说完全有意义,这和我要做的一样。但是,双/浮点实现是这样的:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我完全傻眼了。相比a于自己?第二次检查是为了什么?为什么它的实现方式与 int/long 版本不同?