Производительность вычисления квадратного корня – ожидание и реальностьPython

Программы на Python
Ответить
Anonymous
 Производительность вычисления квадратного корня – ожидание и реальность

Сообщение Anonymous »

Существует как минимум два способа вычислить квадратный корень числа. Наиболее распространенными являются (вероятно):

Код: Выделить всё

math.sqrt(x)
и x**0.5
Поскольку второй из этих методов не требует явного вызова функции, можно ожидать, что он будет быстрее, чем первый метод. Однако, похоже, это не так.
Вот тестовый код:

Код: Выделить всё

"""
Performance comparison between math.sqrt and n ** 0.5
"""

from random import uniform
from math import sqrt
from timeit import timeit
from collections.abc import Iterator

LOOP = 10
URANGE = (0.0, 100.0)

def func1(x: float) -> float:
"""
Calculate square root using math.sqrt function
"""
return sqrt(x)

def func2(x: float) -> float:
"""
Calculate square root using exponential form
"""
return x**0.5

def pdiff(v1: float, v2: float) -> float:
"""
Calculate the percentage difference between two values
"""
return (v1 - v2) / ((v1 + v2) / 2) * 100.0

def rn() -> Iterator[float]:
"""
Generate LOOP pseudo-random numbers
"""
for _ in range(LOOP):
yield uniform(*URANGE)

if __name__ == "__main__":
N = 5_000_000
dt = [[], []]
for ux in rn():
for a, func in zip(dt, (func1, func2)):
a.append(timeit(lambda: func(ux), number=N))
print(func.__name__, f"{a[-1]:.4f}s")
print()
p = pdiff(*map(sum, dt))
print(f"{p:.2f}%")
После нескольких запусков этого кода я заметил, что math.sqrt работает как минимум на 20% быстрее, чем экспонентная форма.
Может ли кто-нибудь объяснить, почему это так?

Подробнее здесь: https://stackoverflow.com/questions/798 ... us-reality
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»