0
Which expression is fast?
z= x*x or z= pow(x,2)
5 Réponses
+ 4
In this simple case I would guess (not tested!) that x*x is faster than pow(x, 2).
The reason being that pow(..) is actually a function call, and that entails some overhead with regard to pushing the function onto the stack frame, copying the arguments onto the stack frame, etc. Then more overhead for setting new SP, etc.
Where as the x*x is a very simple expression which will actually be executed directly from 2 registers.
But this may not necessarily be true in all cases - it will depend on the particular expression!
+ 2
With optimizations enabled this generates the same assembly, meaning they run at the same speed.
I did a speed test, just because I wanted to know how much slower the pow( x, 2 ) would be, and without optimizations enabled the x * x version was many times faster.
Running each test 100.000.000 times,
x * x finished in 0.214 seconds.
pow( x, 2 ) finished in 2.041 seconds.
+ 1
In most compilers pow is guaranteed to be inlined with optimization enabled, resulting in the same exact assembly and no performance difference. But x * x is always guaranteed to be as equal or faster. So if it truly matters, use x * x
+ 1
@Dennis & @aklex - good point! I forgot about optimization.
Yes, with inlining there will be no function call, so we are in fact just comparing expressions.
0
Yeah, x*x is faster than pow(x,2). I just checked by using Chrono in debug mode.