¿Por qué 2 ** 100 es mucho más rápido que math.pow (2,100)?

Al discutir la preguntaExponenciales en python x. ** y vs math.pow (x, y), Alfe declaró que no habría una buena razón para usarmath.pow en lugar del incorporado** operador en python.

timeit muestra que math.pow es más lento que ** en todos los casos. ¿Para qué sirve math.pow () de todos modos? ¿Alguien tiene una idea de dónde puede ser de alguna ventaja entonces?

Tratamos de convencernos unos de otrostimeit argumentos y él es el ganador hasta ahora ;-) - Al menos lo siguientetimeit resultados, parecen verificar quemath.pow is slower than ** in all cases.

import timeit
print timeit.timeit("math.pow(2, 100)",setup='import math')
print timeit.timeit("2.0 ** 100.0")
print timeit.timeit("2 ** 100")
print timeit.timeit("2.01 ** 100.01")

Salida:

0.329639911652
0.0361258983612
0.0364260673523
0.0363788604736

(atajo de ideona)

¿Hay una explicación simple para la diferencia?[1] ¿observamos?

[1] Las actuaciones demath.pow y** difieren en un orden de magnitud.

Ediciones:

argumentos literales en lugar de variables en el títulonota al pie que señala explícitamente la magnitud de la diferencia

Respuestas a la pregunta(1)

Su respuesta a la pregunta