Valor máximo para entero largo

108

¿Cómo puedo asignar el valor máximo para un entero largo a una variable, similar, por ejemplo, para C ++ LONG_MAX.

Sreevisakh
fuente
7
No estoy seguro de que los enteros de Python estén limitados en absoluto. En el momento en que cruza sys.maxint, cambia la representación interna de int a long, que tiene una presicion ilimitada.
tchap
Le pregunté porque tengo que encontrar un valor mínimo entre un grupo de valores uno a uno Así que primero tengo que almacenar un gran valor a una variable para que pueda compararlo con los demás
Sreevisakh
2
A su comentario: recomiendo usar la función incorporada min.
Jiri
5
No necesita el valor máximo si solo está tratando de encontrar el mínimo, incluso si está programando en C ++ o cualquier otro lenguaje. Si de todos modos va a recorrer todos los elementos, simplemente use el primer elemento como su valor inicial. (¡Pero es mejor usar la minfunción, si realmente quieres programar en Python!)
John Y
3
@Sreevisakh: para el "gran valor", el uso infinito, float("inf"). O mejor, use la minfunción incorporada.
Fred Foo

Respuestas:

132

Enteros largos:

No hay un límite definido explícitamente. La cantidad de espacio de direcciones disponible constituye un límite práctico.
(Tomado de este sitio). Consulte los documentos sobre tipos numéricos donde lo verá Long integers have unlimited precision. En Python 2, los enteros cambiarán automáticamente a largos cuando superen su límite:

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


para enteros tenemos

maxint y maxsize:

El valor máximo de un int se puede encontrar en Python 2.x con sys.maxint. Se eliminó en Python 3, pero a sys.maxsizemenudo se puede usar en su lugar. Desde el registro de cambios :

Se eliminó la constante sys.maxint, ya que ya no hay un límite para el valor de los números enteros. Sin embargo, sys.maxsize se puede utilizar como un número entero más grande que cualquier lista práctica o índice de cadena. Se ajusta al tamaño entero "natural" de la implementación y normalmente es el mismo que sys.maxint en versiones anteriores en la misma plataforma (asumiendo las mismas opciones de compilación).

y, para cualquier persona interesada en la diferencia (Python 2.x):

sys.maxint El mayor entero positivo admitido por el tipo de entero regular de Python. Esto es al menos 2 ** 31-1. El entero negativo más grande es -maxint-1 - la asimetría resulta del uso de la aritmética binaria en complemento a 2.

sys.maxsize El entero positivo más grande admitido por el tipo Py_ssize_t de la plataforma y, por lo tanto, el tamaño máximo que pueden tener las listas, cadenas, dictados y muchos otros contenedores.

y para completar, aquí está la versión de Python 3 :

sys.maxsize Un entero que da el valor máximo que puede tomar una variable de tipo Py_ssize_t. Suele ser 2 ^ 31 - 1 en una plataforma de 32 bits y 2 ^ 63 - 1 en una plataforma de 64 bits.

flotadores:

Hay float("inf")y float("-inf"). Estos se pueden comparar con otros tipos numéricos:

>>> import sys
>>> float("inf") > sys.maxsize
True
keyer
fuente
Probé el mismo código pero todavía muestra el tipo como int en Python 3 en una máquina con Windows de 64 bits. Cualquier motivo valioso para ello.
ManojP
1
@ManojP Es porque ya no hay un límite para el tamaño de los enteros en Python 3. Vea la primera cita del bloque.
Editaré
39

Python longpuede ser arbitrariamente grande. Si necesita un valor que sea mayor que cualquier otro valor, puede usarlo float('inf'), ya que Python no tiene problemas para comparar valores numéricos de diferentes tipos. De manera similar, para un valor menor que cualquier otro valor, puede usar float('-inf').

Taymon
fuente
1
por lo que devuelve un valor muy grande, ¿verdad?
Sreevisakh
4
Devuelve infinito en coma flotante, que es mayor que cualquier número finito.
Taymon
4
Debo decir que esta respuesta es definitivamente la más cercana a la correcta en términos de responder a la pregunta del título del OP. Es decir, "¿cómo se obtiene un valor centinela de Python que será mayor que toda su entrada (o al menos no menor que el valor más grande)?". Así que voté a favor de esta respuesta, pero creo que es mejor si el OP aprende a pensar en Python.
John Y
Convenido. Dicho esto, he estado en una situación en la que esta era la única forma de hacer lo que necesitaba.
Taymon
21

Respuesta directa a la pregunta del título:

Los enteros tienen un tamaño ilimitado y no tienen un valor máximo en Python.

Respuesta que aborda el caso de uso subyacente indicado:

De acuerdo con su comentario de lo que está tratando de hacer, actualmente está pensando en algo como

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

No es así como pensar en Python. Una mejor traducción a Python (pero aún no la mejor) sería

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

Tenga en cuenta que lo anterior no usa MAXINT en absoluto. Esa parte de la solución se aplica a cualquier lenguaje de programación: no es necesario conocer el valor más alto posible solo para encontrar el valor más pequeño en una colección.

Pero de todos modos, lo que realmente haces en Python es solo

minval = min(a)

Es decir, no escribes un bucle en absoluto. La min()función incorporada obtiene el mínimo de toda la colección.

John Y
fuente
8

longtype en Python 2.x usa aritmética de precisión arbitraria y no tiene el valor máximo posible. Está limitado por la memoria disponible. Python 3.x no tiene un tipo especial para los valores que no pueden ser representados por el entero nativo de la máquina - todo es inty la conversión se maneja detrás de escena.

rkhayrov
fuente
7

A diferencia de C / C ++ Long en Python tienen una precisión ilimitada. Consulte la sección Tipos numéricos en Python para obtener más información. Para determinar el valor máximo de un número entero, simplemente puede referirse sys.maxint. Puede obtener más detalles en la documentación de sys .

Abhijit
fuente
1

Puede usar: el valor máximo de flotación es

float('inf')

por negativo

float('-inf')
Ramazan
fuente
2
El título es "Valor máximo para entero largo" , no valor máximo de flotante. Entonces, sin una explicación de cómo esto responde a la pregunta, considero este NAA (no una respuesta).
Sнаđошƒаӽ
0

En python3, puede enviar el valor flotante a la función int para obtener ese número 1.7976931348623157e + 308 en representación entera.

import sys    
int(sys.float_info.max)
Frédéric Jacques
fuente
Esto no hace nada útil en absoluto. Para ilustrar eso, intente int (sys.float_info.max) +1 y obtendrá un número entero que es uno más, porque como explicaron otros comentarios, Python solo almacena números enteros de precisión ilimitados.
tialaramex