2

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

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

4

1 回答 1

2

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

于 2013-02-27T21:20:14.407 回答