首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Math.exp(double) vs StrictMath.exp(double)

Java Math.exp(double) vs StrictMath.exp(double)
EN

Stack Overflow用户
提问于 2015-11-23 20:06:19
回答 1查看 671关注 0票数 4

我有一个非常简单的Java测试用例,它先调用Math.exp(double),然后调用StrictMath.exp(double),出于某种原因,我不能理解Java 8上的结果是不同的,尽管从JDK源代码看,Math.exp似乎只是简单地委托给StrictMath.exp

代码语言:javascript
复制
public static void main(String[] args) {
    Properties p = System.getProperties();
    System.out.println(p.get("java.runtime.version"));
    System.out.println(p.get("java.specification.version"));
    System.out.println(Math.exp(1d));
    System.out.println(StrictMath.exp(1d));
}

Java 8上的结果

代码语言:javascript
复制
1.8.0_66-b18
1.8
null
2.718281828459045
2.7182818284590455

Java 7

代码语言:javascript
复制
1.7.0_21-b11
1.7
2.7182818284590455
2.7182818284590455

感谢任何指点,更多的是出于好奇心,而不是任何实际问题。

EN

回答 1

Stack Overflow用户

发布于 2015-11-24 03:58:41

这个问题基本上与乔链接到的问题相反:java.lang.Math.log replaced by intrinsic call, why not java.lang.Math.exp()?

在此之前,revision 6759698e3140 Math.exp()在运行时没有被intrinsic call替换,这意味着它被委托给StrictMath.exp()。在那次修订之后(因此也就是Java8的所有版本),Math.exp()可能会给出不同的结果,因为Java虚拟机将优化调用。

从概念上讲,您可以认为Math提供了“快速”功能,而StrictMath提供了“正确”功能。当Math不能做得更好时,它会求助于StrictMath,但是关于Math行为的保证比StrictMath的更弱,因此可以比StrictMath更优化(可能会以一些有限的正确性为代价)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33870711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档