编程语言
首页 > 编程语言> > 用内部调用替换java.lang.Math.log,为什么不用java.lang.Math.exp()?

用内部调用替换java.lang.Math.log,为什么不用java.lang.Math.exp()?

作者:互联网

我正在重新提出一个我认为太少关注的问题:

为什么这个简单的代码(只是调用Math.log()):

Double thisdouble = Math.log(10);

在jdk1.7.0_11的Math.class的第275行有一个断点:

274 public static double log(double a) {
275    return StrictMath.log(a); // default impl. delegates to StrictMath
276 }

在调试模式下不停止执行?有人可以在他/她自己的机器上尝试这个(我正在使用Eclipse)吗?

调用Math.exp()并调试Math.exp(第254行)函数确实有效…

编辑:上面的答案是,Math.log被Hotspot VM的内部调用所取代,因此从未达到Math类中的代码.现在仍然存在的问题是为什么Math.exp不会被内在的…替换.FWIW我在Core i5 M520(Arrandale)上,但我会严重怀疑该处理器是否支持日志而不是exp. .

解决方法:

我假设Math类中的代码只是一个回退代码,由那些方法调用未被调用某些本机浮点操作代替的架构使用.因此,在您的情况下,该方法实际上不会被调用.但我必须承认,我没有证据支持这一假设.

标签:logarithm,java,debugging,math
来源: https://codeday.me/bug/20191002/1843665.html