Я пытаюсь оптимизировать свой код Python. Между:
y = x*x
or
y = x**2
если мне нужен один триллион итераций в критической по скорости программе, какую из них выбрать?
Я пытаюсь оптимизировать свой код Python. Между:
y = x*x
or
y = x**2
если мне нужен один триллион итераций в критической по скорости программе, какую из них выбрать?
x**2
быстрее, чем x*x
.
Реализация экспоненты имеет некоторые накладные расходы в Python, поэтому обычно быстрее использовать собственное умножение O(n)
с небольшим счетчиком умножения. x*x*x*x*x
намного быстрее, чем x**5
. Время экспоненты является своего рода константой. Ваше время умножения увеличивается с параметром экспоненты, поэтому с большим параметром лучше использовать экспоненту. Однако при действительно очень маленьком параметре (в вашем случае 2) показатель степени выполняется быстрее, чем умножение. И x**2
быстрее, чем x*x
, хотя x**3
намного медленнее, чем x*x*x
. Вы можете найти хороший тест в этом ответе.
x*x
может быть быстрее, чем x**2
. Кажется, вы имели в виду обратное тому, что сказали.
- person jfs; 26.12.2013
x*x
был быстрее, чемx**2
. - person jfs   schedule 26.12.2013x*x
примерно в 3,5 раза быстрее, чемx**2
. Хотя строки кодов операций равны через модульdis
, реализации различаются. В CPythonceval.c
x*x
используетPyNumber_Multiply
иbinary_op1
whilex**2
используетPyNumber_Power
иternary_op
. Мне непонятно, где происходит замедление, но последнее более сложное. - person pylang   schedule 23.06.2019