Максимальное значение для длинного целого числа

109

Как я могу присвоить максимальное значение для длинного целого числа переменной, как, например, в C ++ LONG_MAX.

Среевисах
источник
7
Я не уверен, что целые числа Python вообще ограничены. В тот момент, когда вы пересекаете sys.maxint, он меняет внутреннее представление с int на long, которое имеет неограниченное значение.
tchap
Я спросил, потому что мне нужно найти минимальное значение среди группы значений одно за другим. Итак, сначала мне нужно сохранить большое значение в переменной, чтобы я мог сравнивать его с другими,
Sreevisakh
2
На ваш комментарий - рекомендую использовать встроенную функцию min.
Jiri
5
Вам не нужно максимальное значение, если вы просто пытаетесь найти минимум, даже если вы программируете на C ++ или любом другом языке. Если вы все равно собираетесь перебрать все элементы в цикле, просто используйте первый элемент в качестве начального значения. (Но лучше использовать эту minфункцию, если вы действительно хотите программировать на Python!)
John Y
3
@Sreevisakh: для «большого значения», использование бесконечности float("inf"). А лучше использовать встроенную minфункцию.
Fred Foo

Ответы:

132

Длинные целые числа:

Явно определенного предела нет. Количество доступного адресного пространства является практическим пределом.
(Взято с этого сайта). См. Документацию по числовым типам, где вы это увидите Long integers have unlimited precision. В Python 2 целые числа автоматически переключаются на длинные, когда они превышают свой предел:

>>> import sys
>>> type(sys.maxsize)
<type 'int'>
>>> type(sys.maxsize+1)
<type 'long'>


для целых чисел у нас есть

maxint и maxsize:

Максимальное значение int можно найти в Python 2.x с помощью sys.maxint. Он был удален в Python 3, но sys.maxsizeчасто может использоваться вместо него. Из журнала изменений :

Константа sys.maxint была удалена, поскольку больше нет ограничения на значение целых чисел. Однако sys.maxsize можно использовать как целое число, большее, чем любой практический список или строковый индекс. Он соответствует «естественному» целочисленному размеру реализации и обычно такой же, как sys.maxint в предыдущих выпусках на той же платформе (при тех же параметрах сборки).

и для всех, кого интересует разница (Python 2.x):

sys.maxint Наибольшее положительное целое число, поддерживаемое обычным целочисленным типом Python. Это минимум 2 ** 31-1. Наибольшее отрицательное целое число - -maxint-1 - асимметрия возникает в результате использования двоичной арифметики с дополнением до 2.

sys.maxsize Наибольшее положительное целое число, поддерживаемое типом Py_ssize_t платформы, и, следовательно, списки максимального размера, строки, dicts и многие другие контейнеры.

и для полноты, вот версия Python 3 :

sys.maxsize Целое число, задающее максимальное значение, которое может принимать переменная типа Py_ssize_t. Обычно это 2 ^ 31-1 на 32-битной платформе и 2 ^ 63-1 на 64-битной платформе.

поплавки:

Есть float("inf")и float("-inf"). Их можно сравнить с другими числовыми типами:

>>> import sys
>>> float("inf") > sys.maxsize
True
клавишник
источник
Я пробовал тот же код, но он все еще показывает тип как int в python 3 на 64-битной машине Windows. Любая уважаемая причина для этого.
ManojP
1
@ManojP Это потому, что в Python 3 больше нет ограничения на размер целых чисел. См. Первую цитату из блока. Я отредактирую, чтобы уточнить, что это Python 2
keyser
40

Python longможет быть сколь угодно большим. Если вам нужно значение, которое больше любого другого значения, вы можете использовать float('inf'), поскольку Python не имеет проблем со сравнением числовых значений разных типов. Точно так же для значения, меньшего, чем любое другое значение, вы можете использовать float('-inf').

Таймон
источник
1
так что он возвращает очень большое значение?
Sreevisakh
4
Он возвращает бесконечность с плавающей запятой, которая больше любого конечного числа.
Taymon
4
Я должен сказать, что этот ответ определенно наиболее близок к правильному с точки зрения ответа на вопрос заголовка ОП. То есть «как получить контрольное значение Python, которое будет больше, чем все введенные вами данные (или, по крайней мере, не меньше, чем наибольшее значение)?». Итак, я проголосовал за этот ответ, но я думаю, что лучше, если OP научится думать на Python.
John Y
Согласовано. Тем не менее, я был в ситуации, когда это был единственный способ сделать то, что мне было нужно.
Taymon
21

Прямой ответ на заглавный вопрос:

Целые числа не имеют ограничений по размеру и не имеют максимального значения в Python.

Ответ, который касается указанного основного варианта использования:

Согласно вашему комментарию о том, что вы пытаетесь сделать, в настоящее время вы думаете о чем-то вроде

minval = MAXINT;
for (i = 1; i < num_elems; i++)
    if a[i] < a[i-1]
        minval = a[i];

В Python это не так. Лучшим переводом на Python (но все же не лучшим) было бы

minval = a[0]  # Just use the first value
for i in range(1, len(a)):
    minval = min(a[i], a[i - 1])

Обратите внимание, что в приведенном выше коде MAXINT вообще не используется. Эта часть решения применима к любому языку программирования: вам не нужно знать максимально возможное значение только для того, чтобы найти наименьшее значение в коллекции.

Но в любом случае то, что вы на самом деле делаете в Python, просто

minval = min(a)

То есть вы вообще не пишете цикл. Встроенная min()функция получает минимум всей коллекции.

Джон Y
источник
8

longtype в Python 2.x использует арифметику произвольной точности и не имеет такого понятия, как максимально возможное значение. Ограничено доступной памятью. Python 3.x не имеет специального типа для значений, которые не могут быть представлены машинным целым числом - все есть, intи преобразование выполняется за кулисами.

Рхайров
источник
7

В отличие от C / C ++ Long в Python имеет неограниченную точность. Обратитесь к разделу Числовые типы в python для получения дополнительной информации. Чтобы определить максимальное значение целого числа, вы можете просто сослаться sys.maxint. Вы можете получить более подробную информацию из документации sys .

Абхиджит
источник
1

Вы можете использовать: максимальное значение float равно

float('inf')

для отрицательного

float('-inf')
Рамазан
источник
2
Заголовок - «Максимальное значение для длинного целого числа» , а не максимальное значение с плавающей запятой. Итак, без объяснения того, как это отвечает на вопрос, я считаю это НАА (не ответом).
Sнаđошƒаӽ
0

В python3 вы можете отправить значение float в функцию int, чтобы получить это число 1.7976931348623157e + 308 в целочисленном представлении.

import sys    
int(sys.float_info.max)
Фредерик Жак
источник
Это вообще не делает ничего полезного. Чтобы проиллюстрировать это, попробуйте int (sys.float_info.max) +1, и вы просто получите целое число, которое является еще одним, потому что, как объяснялось в других комментариях, Python просто хранит целые числа неограниченной точности.
tialaramex