Szybkość obliczeń mocy (w pytonie)

Ciekawi mnie, dlaczego mnożenie jest o wiele szybsze niż pobieranie mocy w Pythonie (choć z tego, co przeczytałem, może być prawdą również w wielu innych językach). Na przykład dużo szybciej jest to zrobić

<code>x*x
</code>

niż

<code>x**2
</code>

Przypuszczam, że operator ** jest bardziej ogólny i może również radzić sobie z potęgami ułamkowymi. Ale jeśli to dlatego jest o wiele wolniejszy, dlaczego nie wykonuje sprawdzenia wykładnika int, a następnie wykonuje mnożenie?

Edytować: Oto przykładowy kod, który próbowałem ...

<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>

Teraz pow2 jest tylko szybkim przykładem i nie jest zoptymalizowany!
Ale mimo to stwierdzam, że przy użyciu n = 2 i r = 1 000 000, a następnie pow1 zajmuje ~ 2500 ms, a pow2 zajmuje ~ 1700 ms.
Przyznaję, że dla dużych wartości n, pow1 robi się znacznie szybciej niż pow2. Ale to nie jest zbyt zaskakujące.

questionAnswers(6)

yourAnswerToTheQuestion