Python 3 a float('inf')
et Decimal('Infinity')
mais pas int('inf')
. Alors, pourquoi manque-t-il un nombre représentant l'infini des nombres entiers dans le langage? Est-ce que int('inf')
est déraisonnable?
Extrait de ici: https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html
Les nombres à virgule flottante IEEE 754 peuvent représenter l'infini positif ou négatif, et NaN (pas un nombre)
En d’autres termes, la représentation de float
et Decimal
peut stocker ces valeurs spéciales. Cependant, rien dans le type de base int
ne peut stocker le même. Lorsque vous dépassez la limite de 2 ^ 32 dans un entier 32 bits non signé, vous passez simplement de nouveau à 0.
Si vous le souhaitez, vous pouvez créer une classe contenant un entier pouvant comporter des valeurs infinies.
Vous avez raison de dire qu’un infini d’entier est possible et qu’aucun n’a été ajouté à la norme Python. Ceci est probablement dû au fait que math.inf
le supplante dans presque tous les cas (comme Martijn l’a déclaré dans son commentaire).
En attendant, j'ai ajouté une implémentation de entiers étendus sur 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
For python 2. Il est parfois nécessaire d'avoir un très grand nombre entier. Par exemple, je peux vouloir produire un sous-tableau avec x [: n] et, parfois, je souhaite définir Si vous ne pouvez pas utiliser un float pour n (python veut un entier), vous avez besoin d'un "grand entier". Pour ce faire, utilisez le plus grand entier. available: sys.maxint. Voici un exemple:
# MAX_SOURCES = sys.maxint # normal setting
MAX_SOURCES = 5 # while testing
# code to use an array ...
... sources[:MAX_SOURCES]
Ainsi, lors des tests, je pourrais utiliser un tableau de sources plus petit mais utiliser le tableau complet en production.