При сравнении поплавков с целыми числами некоторые пары значений занимают гораздо больше времени, чем другие значения аналогичной величины.
Например:
>>> import timeit
>>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 million times
0.5387085462592742
Но если поплавок или целое число становится меньше или больше на определенную величину, сравнение выполняется намного быстрее:
>>> timeit.timeit("562949953420000.7 < 562949953422000") # integer increased by 1000
0.1481498428446173
>>> timeit.timeit("562949953423001.8 < 562949953421000") # float increased by 3001.1
0.1459577925548956
Изменение оператора сравнения (например, с использованием ==
или >
) не влияет на время каким-либо заметным образом.
Это связано не только с величиной, потому что выбор больших или меньших значений может привести к более быстрым сравнениям, поэтому я подозреваю, что это доходит до какого-то неудачного способа выстраивания бит.
Очевидно, что сравнение этих значений более чем достаточно быстро для большинства случаев использования. Мне просто интересно, почему Python, похоже, больше борется с некоторыми парами ценностей, чем с другими.