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 を使用しています)?

(254行目)関数の呼び出しMath.exp()とデバッグは機能します...Math.exp

編集:上記に対する答えはMath.log、Hotspot VM による組み込み呼び出しに置き換えられるため、Math クラスのコードに到達することはありません。今残っている問題はMath.exp、組み込みに置き換えられない理由です...FWIW私はCore i5 M520(Arrandale)を使用していますが、そのプロセッサがexpではなくlogをサポートしていることを真剣に疑っています...

4

1 に答える 1

2

Mathクラスのコードはフォールバックコードにすぎず、メソッドの呼び出しがネイティブの浮動小数点演算の呼び出しに置き換えられないアーキテクチャで使用されていると思います。したがって、このメソッドは実際には呼び出されません。しかし、私にはこの仮定を裏付ける証拠がないことを告白しなければなりません。

于 2013-02-27T21:20:14.407 に答える