Экспоненциальные вычисления в Python
экспериментируя с Эйлер 99, Я заметил, что эти операции имеют разное время:
>>> 632382**518061 # never finishes..
>>> 632382**518061 > 519432**525806 # finishes in few seconds
True
интересно, в чем причина этого?
1 ответов
дело в том, что python пытается напечатать первый результат. Но это число имеет миллиард цифр, и python не сбрасывает вывод, пока не будет обнаружена новая строка, которая после отправки всех цифр на стандартный вывод. Как отметил @abarnert, что во много раз хуже, это преобразование числа в строку для его печати. Это требует значительного выделения памяти и вычислительной мощности. С другой стороны, второе выражение просто должно напечатать True
. Вы можете проверить это, если назначите первое выражение:
>>> a = 632382**518061
таким образом, выход числа подавляется.