Обработка больших чисел в коде

Можно открыть их с большинством утилит распаковки в эти дни, тогда просто получить что-то как Декомпилятор Java ди-джея , если Вы хотите просмотреть источник.

9
задан Pablo Claus 11 August 2012 в 15:47
поделиться

5 ответов

Как указано в других ответах, Python поддерживает целые числа, ограниченные только объемом доступной памяти. Если вам нужна еще более быстрая поддержка для них, попробуйте gmpy (как автор gmpy и текущий со-сопровождающий я, конечно, немного предвзято; -):

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x+1'
10000 loops, best of 3: 114 usec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y+1'
10000 loops, best of 3: 65.4 usec per loop

Обычно арифметика не является узким местом для работа с такими числами (хотя прямая поддержка gmpy некоторых комбинаторных и теоретико-числовых функций может помочь, если это то, что вы делаете с такими числами). Преобразование чисел в десятичные строки, вероятно, будет наиболее распространенной операцией, которая будет казаться самой медленной ...:

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(x)'
10 loops, best of 3: 3.11 sec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(y)'
10 loops, best of 3: 27.3 msec per loop

Как видите, даже в gmpy строковое преобразование огромных чисел может быть в сотни раз медленнее, чем простое сложение ( увы, это сложная по сути операция!);

23
ответ дан 4 December 2019 в 06:20
поделиться

Да; Python 2.x имеет два типа целых чисел: int ограниченного размера и long of неограниченного размера . Однако при необходимости все расчеты автоматически преобразуются в длинные. Обработка больших чисел работает нормально, но медленнее будет, если вы попытаетесь распечатать 100000 цифр для вывода или даже попытаться создать из них строку.

Если вам также нужна произвольная десятичная точность с фиксированной точкой, есть десятичный модуль.

7
ответ дан 4 December 2019 в 06:20
поделиться

Конечно, может:

>>> s = 10 ** 100000
4
ответ дан 4 December 2019 в 06:20
поделиться
  1. Если вы использовали C / C ++, то вы привыкли к функции sprintf.

  2. Есть хороший шанс что вторая линия менее эффективна. Echo разработан как команда вывода, тогда как sprintf предназначен для подстановки строковых токенов. Я не специалист по PHP, но подозреваю, что с эхом связано больше объектов. Если он действует как Java, он создает новую строку каждый раз, когда что-то добавляется в список, так что в итоге вы получите 4 строки.

3
ответ дан 4 December 2019 в 06:20
поделиться

Как уже указывалось, Python может обрабатывать числа настолько большие, насколько позволяет ваша память. Хочу лишь добавить, что по мере роста цифр стоимость всех операций над ними увеличивается. Это не только для печати / преобразования в строку (хотя это самый медленный), добавление двух больших чисел (больше, чем может обрабатывать ваше оборудование) больше не является O (1).

Я просто упоминаю об этом, чтобы указать, что хотя Python аккуратно скрывает детали работы с большими числами, вы все же должны помнить, что эти операции с большими числами не всегда похожи на операции с обычными int.

3
ответ дан 4 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: