Целое число против умножения с плавающей запятой в Python - PullRequest
0 голосов
/ 21 февраля 2020

Недавно я написал короткую программу Python для вычисления факториала числа в качестве теста, чтобы увидеть, насколько быстрое целочисленное умножение сравнивается с умножением с плавающей запятой. Вообразите мое удивление, когда я заметил, что это было умножение с плавающей запятой, которое было быстрее! Я озадачен этим и надеюсь, что кто-то сможет просветить меня. Я использую точно такую ​​же функцию для вычисления факториала и просто передаю ей число с плавающей точкой вместо целого числа. Вот код:

import time

def fact(n):
    n_fact = n
    while n > 2:
        n_fact *= n - 1
        n -= 1
    print(n_fact)
    return n_fact

n = int(input("Enter an integer for factorial calculation: "))
n_float = float(n)

# integer factorial
start = time.time()
fact(n)
end = time.time()
print("Time for integer factorial calculation: ", end - start, "seconds.")

# float factorial
start = time.time()
fact(n_float)
end = time.time()
print("Time for float factorial calculation: ", end - start, "seconds.")

Когда я запускаю эту программу, результаты меняются, но в целом целочисленные вычисления в большинстве случаев выполняются быстрее, что противоречит всему, что я думал (знал ум, я не эксперт). Что-то не так с моим методом расчета времени? Нужно ли выполнять вычисления тысячи раз, чтобы получить более точную оценку времени? Любое понимание будет оценено.

1 Ответ

0 голосов
/ 21 февраля 2020

Спасибо за комментарии и советы по использованию timeit. Когда я перезапускаю код, используя timeit, я нахожу результаты, аналогичные тем, что упоминает Себ. А именно, целочисленные вычисления выполняются быстрее для малых значений (для меня примерно до 15), а затем значения с плавающей точкой быстрее (становятся значительно быстрее для больших значений). Это именно то, что я и ожидал!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...