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.