1198 votes

Valeurs maximales et minimales pour les entiers

Comment représenter les valeurs minimales et maximales pour les entiers en Python ? En Java, nous avons Integer.MIN_VALUE et Integer.MAX_VALUE.


Voir aussi : <a href="https://stackoverflow.com/questions/3477283">Quel est le flottant maximum en Python ?</a>.

21 votes

Notez que en Python 3, le type int est essentiellement le même que le type long en Python 2, donc l'idée d'un maximum ou d'un minimum int disparaît complètement. C'est fondamentalement sans importance même sur Python 2.

23 votes

@agf : cela peut être pertinent de différentes manières. Par exemple dans n'importe quel algorithme qui nécessite de sauvegarder la valeur minimale trouvée (comme un algorithme de tri). La valeur minimale pourrait être initialisée à sys.maxint, ce qui garantit que n'importe quelle première valeur trouvée est prise comme minimum

2 votes

@Toaster sauf que vous pouvez avoir une liste où toutes les valeurs sont supérieures à sys.maxint car c'est seulement le maximum pour le type int sur Python 2, que Python promouvra silencieusement en long.

2voto

not a robot Points 1674

Comme le soulignent d'autres réponses, contrairement à float (qui a une valeur maximale de sys.float_info.max), le type int est illimité en Python ; il est vraiment limité par la limite de mémoire de votre machine. Cela dit, il y a certaines limites liées aux entiers.

Par exemple, depuis Python 3.10.7, la conversion de str en int ou l'affichage de int est limitée à 4300 chiffres, ce qui a pour conséquence que l'écriture d'un entier très long dans un fichier est limitée par défaut (ce qui peut être désactivé en exécutant sys.set_int_max_str_digits(0)). Vous pouvez obtenir des informations sur la représentation interne des entiers en Python en utilisant sys.int_info.

Aussi, étant donné que float est limité, vous ne pouvez pas effectuer de calculs où le résultat deviendrait un flottant qui est en dehors de la limite des flottants (par exemple, 2**1025/2 déclenche une OverflowError).

De plus, les int dans des bibliothèques populaires d'analyse de données telles que numpy et pandas, etc. sont limités par leur type, par exemple numpy.uint64 peut contenir le plus grand entier positif dans numpy, ce qui peut être vérifié avec np.iinfo('uint64'). Cela signifie que nous ne pouvons pas effectuer de calculs vectorisés impliquant des entiers trop grands, par exemple, nous ne pouvons pas prendre le log2 de 2**64 (en fait, np.log2(2**64) déclenche une TypeError).

sys.maxsize est la taille de la liste la plus grande possible. Vous pouvez vérifier cela en utilisant range().

len(range(sys.maxsize)) == sys.maxsize    # 9223372036854775807
len(range(sys.maxsize+1))                 # OverflowError

-3voto

Nishan Singh Points 13

Le code ci-dessous vous aidera. pour une valeur maximale vous pouvez utiliser sys.maxsize et pour le minimum, vous pouvez negate la même valeur et l'utiliser.

import sys 

ni=sys.maxsize
print(ni)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X