将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位)看起来差异并不像以前那么大。
答案 0 :(得分:7)
我能想到的唯一原因是表现。首先让我们测试他们是否真的这样做,我们没有忽视某些事情。
var test = (test = 5 * 2) * test; // 100
Math.pow(5 * 2, 2); // 100
正如预期的那样,事实证明这一点也是如此。现在让我们看看他们是否使用jsperf有不同的表现。请在此处查看:http://jsperf.com/...num-self
Firefox 23的差异非常很小,但对于Safari来说差异要大得多。在那里使用Math.pow
似乎更贵。