Which is faster: x*x or x**2?
Asked Answered
S

1

11

I am trying to optimize my Python code. Between:

y = x*x

or

y = x**2

if I need one trillion iterations in a speed-critical program, which one should I choose?

Staford answered 25/12, 2013 at 20:57 Comment(5)
@ChrisHayes: I actually done it for Gauss-Legendre Algorithm in python. At the time x*x was faster than x**2.Photogene
@TonyHopkinson Python is used in a lot of scientific computing, despite being agonizingly slow (usually it is used to call optimized libraries like numpy).Improvised
You ever see the code the mathmeticians and engineers write? Microoptimisation is the least of their problems. :(Separable
@roippi et al. even after more than 4 years, I'm yet to understand why this question is "off-topic". Someone plz enlighten me or remove the "off-topic" honor.Staford
This seems like a legitimate question. On Python 3.6, x*x is about 3.5x faster than x**2. Although lines of opcodes are equal via dis module, the implementations differ. In CPython ceval.c, x*x uses PyNumber_Multiply and binary_op1 while x**2 uses PyNumber_Power and ternary_op. It's not clear to me where the slow down occurs, but the latter is more complex.Kathikathiawar
G
3

x**2 is faster than x*x.

Implementation of exponent has some overhead in Python, so it is usually faster to use your custom multiplication O(n) with small multiplication count. x*x*x*x*x is way faster than x**5. Exponent time is a sort of constant. Your multiplication time is increasing with exponent parameter, so with a large parameter it is better to use exponent. However, with really very small parameter (2, in your case), exponent is faster than multiplication. And x**2 is faster than x*x, although x**3 is way slower than x*x*x. You can find a nice benchmark in this answer.

Gauntry answered 25/12, 2013 at 21:10 Comment(2)
x*x can be faster than x**2. It seems you meant the reverse of what you said.Photogene
x**2 is a special case, and the speed difference in my tests was pretty small. So I guess it can also depend on x.Gauntry

© 2022 - 2024 — McMap. All rights reserved.