5

JavaScript ライブラリを Python に移植するときに、次のコードを見つけました。

return Math.atan2(
    Math.sqrt(
       (_ = cosφ1 * sinΔλ) * _ + (_ = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * _
    ), 
    sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ
);

私は間違っていますか、それとも次(_ = cosφ1 * sinΔλ) * _のように書くことができますMath.pow(cosφ1 * sinΔλ, 2)か?

著者は Math.pow の使用を避けようとしていると思いますが、これは javascript で一時的な割り当てに比べて高価ですか?

[アップデート]

2016 年後半の時点で、Chrome 53.0 (64 ビット) では、その差は以前ほど大きくないように見えます。

4

1 に答える 1

9

私が考えることができる唯一の理由はパフォーマンスです。最初に、彼らが実際に同じことを行い、何かを見落としていないかどうかをテストしましょう。

var test = (test = 5 * 2) * test; // 100
Math.pow(5 * 2, 2); // 100

予想通り、それは同じことをすることが証明されています。では、jsperf を使用してパフォーマンスが異なるかどうかを見てみましょう。ここで確認してください: http://jsperf.com/...num-self

Firefox 23 の違いは非常に小さいですが、Safari の違いははるかに大きかったです。使用Math.powすると、より高価になるようです。

于 2013-08-22T14:33:49.367 に答える