Math.IEEEremainder()和StrictMath.IEEEremainder()之间的区别

时间:2016-01-21 08:26:42

标签: java math

我在IEEEremainder()包中的两个地方找到了lang

  1. java.lang.Math.IEEEremainder()
  2. java.lang.StrictMath.IEEEremainder()
  3. 我的问题是两种方法是相同的还是不同的?

2 个答案:

答案 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
}