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

时间:2013-02-26 09:19:00

标签: java debugging math logarithm

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

为什么这个简单的代码(只需调用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 ...

1 个答案:

答案 0 :(得分:2)

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