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


108

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


7
Я не впевнений, що цілі числа Python взагалі обмежені. У той момент, коли ви перетинаєте sys.maxint, він змінює внутрішнє представлення з int на long, яке має необмежену презицію.
чап

Я запитав, тому що мені потрібно знайти мінімальну величину серед групи значень по одному, тому спочатку мені потрібно зберегти велике значення змінної, щоб я міг порівнювати її з іншими
Sreevisakh

2
На ваш коментар - я рекомендував використовувати вбудовану функцію хв.
Іржі

5
Максимальне значення вам не потрібно, якщо ви просто намагаєтеся знайти мінімум, навіть якщо ви програмуєте на C ++ або будь-якій іншій мові. Якщо ви все одно збираєтеся проглянути всі елементи, просто використовуйте перший елемент як вихідне значення. (Але краще скористатися minфункцією, якщо ви дійсно хочете програмувати на Python!)
Джон Y

3
@Sreevisakh: для «великого значення», використання нескінченності float("inf"). Або ще краще, використовуйте вбудовану minфункцію.
Фред Фоо

Відповіді:


132

Довгі цілі числа:

Не існує чітко визначеного обмеження. Обсяг доступного адресного простору становить практичну межу.
(Взято з цього сайту). Дивіться документи про числові типи, де ви це побачите Long integers have unlimited precision. У Python 2 Integers автоматично переключиться на довгі, коли вони виростуть за їх межі:

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


для цілих чисел у нас

максимізувати та збільшити:

Максимальне значення 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 платформи, і, таким чином, можуть мати списки максимального розміру, рядки, дикти та багато інших контейнерів.

і для повноти, ось версія 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 на Windows 64-бітній машині. Будь-яка цінна причина для цього.
ManojP

1
@ManojP Це тому, що в Python 3. більше немає обмеження на розмір цілих чисел. Дивіться першу блокову цитату. Я відредагую, щоб уточнити, що прикладом є Python 2
keyser

39

Python longможе бути довільно великим. Якщо вам потрібне значення, яке перевищує будь-яке інше значення, ви можете використовувати float('inf'), оскільки Python не має проблем зі порівнянням числових значень різних типів. Аналогічно, для значення, меншого, ніж будь-яке інше значення, ви можете використовувати float('-inf').


1
тож повертає дуже велике значення чи не так?
Срівішах

4
Він повертає нескінченність з плаваючою комою, яка більша за будь-яке кінцеве число.
Таймон

4
Мушу сказати, що ця відповідь, безумовно, є найбільш правильною з точки зору відповіді на головне питання ОП. Тобто, "як ви отримаєте дозорне значення Python, яке буде більшим, ніж усі ваші вхідні дані (або, принаймні, не менше, ніж найбільше значення)?". Тож я відповів на цю відповідь, але вважаю, що краще, якщо ОП навчиться думати на Python.
Джон Y

Домовились. Однак, я опинився в ситуації, коли це був єдиний спосіб зробити те, що мені потрібно.
Таймон

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()функція отримує мінімум всієї колекції.


8

longтипу в Python 2.x використовує довільну арифметику точності і не має такого поняття, як максимально можливе значення. Він обмежений наявною пам'яттю. У Python 3.x немає спеціального типу для значень, які не можуть бути представлені цілим числом нашої машини - все є intі конверсія обробляється за кадром.


7

На відміну від C / C ++ Long у Python мають необмежену точність. Для отримання додаткової інформації див. Розділ Числові типи в python. Щоб визначити максимальне значення цілого числа, ви можете просто вказати sys.maxint. Більш детальну інформацію можна отримати в документації на sys .


1

Ви можете використовувати: max значення float є

float('inf')

за негатив

float('-inf')

2
Заголовок - "Максимальне значення для довгих цілих чисел" , а не максимальне значення поплавця. Отже, не пояснюючи, як це відповідає на питання, я вважаю цей NAA (не відповідь).
Snađошƒаӽ

0

У python3 ви можете надіслати значення float у функцію int. Отримати це число 1,7976931348623157e + 308 у цілочисленному поданні.

import sys    
int(sys.float_info.max)

Це взагалі не робить нічого корисного. Щоб проілюструвати це, спробуйте int (sys.float_info.max) +1, і ви отримаєте ціле число, яке є ще одним, оскільки, як пояснили інші коментарі, Python просто зберігає необмежену цілі числа.
tialaramex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.