我在IEEEremainder()
包中的两个地方找到了lang
。
java.lang.Math.IEEEremainder()
java.lang.StrictMath.IEEEremainder()
我的问题是两种方法是相同的还是不同的?
答案 0 :(得分:8)
正如文件中所述:
与类
StrictMath
的某些数值方法不同,类Math
的等效函数的所有实现都未定义为返回逐位相同的结果。这种放松允许在不需要严格再现性的情况下实现更好的实施。
由于x86(-64)架构使用IEEE 754浮点,在x86 OpenJDK实现上,Math
倾向于委托给StrictMath
,并且在这种情况下这样做,但这不是规范要求。
答案 1 :(得分:2)
至少在OpenJDK中,Math
版本根据grepCode委托给StrictMath
:
public static double IEEEremainder(double f1, double f2) {
return StrictMath.IEEEremainder(f1, f2); // delegate to StrictMath
}