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:
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.
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:
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').
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
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 valuefor 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.
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.
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 .
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.
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.
min
función, si realmente quieres programar en Python!)float("inf")
. O mejor, use lamin
función incorporada.Respuestas:
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: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 asys.maxsize
menudo se puede usar en su lugar. Desde el registro de cambios :y, para cualquier persona interesada en la diferencia (Python 2.x):
y para completar, aquí está la versión de Python 3 :
flotadores:
Hay
float("inf")
yfloat("-inf")
. Estos se pueden comparar con otros tipos numéricos:fuente
Python
long
puede ser arbitrariamente grande. Si necesita un valor que sea mayor que cualquier otro valor, puede usarlofloat('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 usarfloat('-inf')
.fuente
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
No es así como pensar en Python. Una mejor traducción a Python (pero aún no la mejor) sería
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
Es decir, no escribes un bucle en absoluto. La
min()
función incorporada obtiene el mínimo de toda la colección.fuente
long
type 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 esint
y la conversión se maneja detrás de escena.fuente
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 .fuente
Puede usar: el valor máximo de flotación es
por negativo
fuente
En python3, puede enviar el valor flotante a la función int para obtener ese número 1.7976931348623157e + 308 en representación entera.
fuente