Paulo Scardine Paulo Scardine - 4 months ago 9
Javascript Question

Is Math.pow more expensive than multiplication using temporary assignments?

When porting a javascript library to Python, I found this code:

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Δλ
);


Am I wrong or
(_ = cosφ1 * sinΔλ) * _
could be written like
Math.pow(cosφ1 * sinΔλ, 2)
?

I guess the author is trying to avoid using Math.pow, is this expensive in javascript compared to the temporary assignment?

Answer

The only reason I can think of is performance. First let's test if they actually do the same and we didn't overlook something.

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

As expected, that's proven to do the same. Now let's see if they have different performances using jsperf. Check it out here: http://jsperf.com/...num-self

The differences for Firefox 23 are very small, but for Safari the difference was much bigger. Using Math.pow seems to be more expensive there.