Быстрее сохранить деление в переменную и использовать переменную или пересчитать дважды? - PullRequest
0 голосов
/ 06 января 2019

Представьте, что у вас есть следующие типы данных (числа заполняются в качестве аргументов):

  • Целое число <- <strong>Вес
  • Поплавок <- <strong>Высота

Цель состоит в том, чтобы вычислить b ody- m ass i ndex, который будет выглядеть как 23,13 и т. Д ...

bodyMassIndex = вес / рост ^ 2

Я хочу работать с bmi немного больше, например, конвертировать bmi (float) в int или делить bmi по модулю и т. Д. *

Быстрее ли с точки зрения скорости вычислений сначала сохранить bmi, а затем использовать переменную в других вычислениях (опция a) или снова выполнить вычисление формулы в другом вычислении (опция b) ?


Вариант А:

**bmi** = weight / height^2

OtherCalculation = **bmi** % 10

...

Вариант B:

bmi = weight / (height^2)

OtherCalculation = (weight / height^2) % 10

OtherOtherCalculation =  (weight / height^2) * 100

...

Редактировать : Я пишу на Python

1 Ответ

0 голосов
/ 06 января 2019

Я решил сравнить ваши примеры с помощью модуля timeit в python. Я выбрал произвольную высоту и ширину, так как эти значения не повлияют на результаты сравнения. Используя приведенный ниже скрипт, я обнаружил, что (что неудивительно) сохранение значений в промежуточную переменную как минимум вдвое быстрее как для Python 3.x, так и для Python 2.x.

from timeit import timeit

runs = 1000000

option_a = "(w / h ** 2)"
option_b = "bmi"

setup_a = "w = 4.1; h = 7.6"
setup_b = "{}; bmi = {}".format(setup_a, option_a)

test_1 = "v = {} % 10"
test_2 = "v = {} * 100"


print(timeit(test_1.format(option_a), setup=setup_a, number=runs))
print(timeit(test_1.format(option_b), setup=setup_b, number=runs))

print(timeit(test_2.format(option_a), setup=setup_a, number=runs))
print(timeit(test_2.format(option_b), setup=setup_b, number=runs))

Результаты в Python 3

0.2930161730000691
0.082850623000013
0.17264470200007054
0.06962196800031961

И в Python 2

0.126236915588
0.0508558750153
0.113535165787
0.0394539833069
...