java.lang.Math和java.lang.StrictMath有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

显然java.lang.StrictMath包含其他功能(双曲线等),java.lang.Math但没有在两个库中找到的功能有所不同?

提问于
用户回答回答于

Math该类的Javadoc 提供了有关这两个类之间差异的一些信息:

与一些类的数字方法不同,类StrictMath的等价函数的所有实现 Math都没有定义为返回相同的结果。这种放松允许在不需要严格重现性的情况下实现更好的执行。 默认情况下,许多Math方法只是调用等效方法来 StrictMath实现它们。鼓励代码生成器在可用的情况下使用平台特定的本地库或微处理器指令来提供更高性能的Math方法实现 。这种更高性能的实现仍然必须符合规范Math

因此,Math该类对某些操作应该执行的操作规定了一些规则,但它们并不要求在库的所有实现中都返回完全相同的结果。

这允许库的特定实现返回类似的结果,但是如果例如Math.cos调用该类,则不会得到完全相同的结果。这将允许特定于平台的实现(例如使用x86浮点和SPARC浮点),这可能会返回不同的结果。

但是,StrictMath由不同实现返回的结果必须返回相同的结果。这对于需要不同平台上的结果的重复性的情况将是可取的。

用户回答回答于

你检查了源代码吗?java.lang.Math委托给许多方法java.lang.StrictMath

例:

public static double cos(double a) {
    return StrictMath.cos(a); // default impl. delegates to StrictMath
}

扫码关注云+社区