Использование global
, как предлагается в документе,
flops = 0
def add(x1, x2):
global flops
flops += 1
return x1 + x2
def multiply(x1, x2):
global flops
flops += 1
return x1 * x2
def poly_horner(A, x):
global flops
flops = 0
p = A[-1]
i = len(A) - 2
while i >= 0:
p = add(multiply(p, x), A[i])
i -= 1
return p
def poly_naive(A, x):
global flops
flops = 0
p = 0
for i, a in enumerate(A):
xp = a
for _ in range(i):
xp = multiply(xp, x)
p = add(p, xp)
return p
Для запуска приведенного выше кода, например:
>>> poly_horner([1,2,3,4,5], 2)
129
>>> print(flops)
8
Сравнить с numpy
polyval
:
>>> import numpy as np
>>> np.polyval([5,4,3,2,1], 2)
129