Бесконечное целое число в Python - программирование
Подтвердить что ты не робот

Бесконечное целое число в Python

Python 3 имеет float('inf') и Decimal('Infinity'), но не int('inf'). Итак, почему число, представляющее бесконечное множество целых чисел, отсутствует на языке? Является ли int('inf') необоснованным?

4b9b3361

Ответ 1

Взято отсюда: https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

Число с плавающей запятой IEEE 754 может представлять собой положительную или отрицательную бесконечность, а NaN (не число)

То есть, представление float и Decimal может хранить эти специальные значения. Однако в базовом типе int нет ничего, что могло бы сохранить то же самое. Когда вы превысите предел 2 ^ 32 в 32-битном int без знака, вы просто снова перевернитесь на 0.

Если вы хотите, вы можете создать класс, содержащий целое число, которое может содержать возможность бесконечных значений.

Ответ 2

Вы правы, что целочисленная бесконечность возможна, и что ни один из них не был добавлен в стандарт Python. Вероятно, это связано с тем, что math.inf вытесняет его почти во всех случаях (как заявил Мартейн в своем комментарии).

Тем временем я добавил в PyPI реализацию расширенных целых чисел :

In [0]: from numbers import Integral, Real

In [0]: from extended_int import int_inf, ExtendedIntegral, Infinite

In [0]: i = int_inf

In [4]: float(i)
Out[4]: inf

In [5]: print(i)
inf

In [6]: i ** i

Out[6]: inf

In [7]: i
Out[7]: inf

In [9]: isinstance(i, Real)

Out[9]: True

In [10]: isinstance(i, Integral)

Out[10]: False

In [11]: isinstance(i, Infinite)

Out[11]: True

In [12]: isinstance(i, ExtendedIntegral)

Out[12]: True

In [13]: isinstance(2, ExtendedIntegral)

Out[13]: True

In [14]: isinstance(2, Infinite)

Out[14]: False

Ответ 3

Для python 2. Иногда бывает, что вам нужно очень большое целое число. Например, я могу создать subarray с x [: n] и, возможно, иногда мне нужно установить n на значение, чтобы весь массив был создан. Поскольку вы не можете использовать float для n (python хочет целое число), вам нужно "большое целое число". Хороший способ сделать это - использовать наибольшее целое число: sys.maxint. Вот пример:

# MAX_SOURCES = sys.maxint # normal setting
MAX_SOURCES = 5 # while testing

# code to use an array ...
... sources[:MAX_SOURCES]

Итак, во время тестирования я мог бы использовать меньший массив источников, но использовать полный массив в процессе производства.