Velocidade de cálculo de poderes (em python)
Estou curioso para saber por que é muito mais rápido multiplicar do que ter poderes em python (embora pelo que eu tenha lido, isso também pode ser verdade em muitos outros idiomas). Por exemplo, é muito mais rápido fazer
<code>x*x </code>
do que
<code>x**2 </code>
Suponho que o operador ** seja mais geral e também possa lidar com poderes fracionários. Mas se é por isso que é muito mais lento, por que ele não executa uma verificação de um expoente int e apenas faz a multiplicação?
Editar: Aqui está um código de exemplo que eu tentei ...
<code>def pow1(r, n): for i in range(r): p = i**n def pow2(r, n): for i in range(r): p = 1 for j in range(n): p *= i </code>
Agora, o pow2 é apenas um exemplo rápido e claramente não está otimizado!
Mas mesmo assim eu acho que usando n = 2 er = 1.000.000, então pow1 leva ~ 2500ms e pow2 leva ~ 1700ms.
Eu admito que para valores grandes de n, então o pow1 fica muito mais rápido que o pow2. Mas isso não é muito surpreendente.