Valor máximo para inteiro longo

108

Como posso atribuir o valor máximo de um inteiro longo a uma variável, semelhante, por exemplo, a C ++ LONG_MAX.

Sreevisakh
fonte
7
Não tenho certeza se os inteiros do Python são limitados. No momento em que você cruza sys.maxint, ele muda a representação interna de int para long, que tem presicion ilimitada.
capítulo
Eu perguntei porque preciso encontrar um valor mínimo entre um grupo de valores um por um. Então, primeiro preciso armazenar um valor grande em uma variável para que eu possa compará-la com outras
Sreevisakh
2
Para o seu comentário - eu recomendo usar a função embutida min.
Jiri
5
Você não precisa do valor máximo se estiver apenas tentando encontrar o mínimo, mesmo se estiver programando em C ++ ou qualquer outra linguagem. Se você vai apenas percorrer todos os elementos de qualquer maneira, simplesmente use o primeiro elemento como seu valor inicial. (Mas é melhor usar a minfunção, se você realmente deseja programar em Python!)
John Y
3
@Sreevisakh: para o "grande valor", use infinito float("inf"),. Ou melhor, use a minfunção embutida.
Fred Foo

Respostas:

132

Inteiros longos:

Não há limite definido explicitamente. A quantidade de espaço de endereço disponível constitui um limite prático.
(Retirado deste site). Veja os documentos sobre Tipos numéricos onde você verá isso Long integers have unlimited precision. No Python 2, os números inteiros mudam automaticamente para longos quando crescem além de seu limite:

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


para inteiros nós temos

maxint e maxsize:

O valor máximo de um int pode ser encontrado no Python 2.x com sys.maxint. Ele foi removido no Python 3, mas sys.maxsizegeralmente pode ser usado em seu lugar. Do changelog :

A constante sys.maxint foi removida, uma vez que não há mais um limite para o valor de inteiros. No entanto, sys.maxsize pode ser usado como um número inteiro maior do que qualquer lista prática ou índice de string. Ele está em conformidade com o tamanho inteiro “natural” da implementação e é normalmente o mesmo que sys.maxint em versões anteriores na mesma plataforma (assumindo as mesmas opções de construção).

e, para qualquer pessoa interessada na diferença (Python 2.x):

sys.maxint O maior inteiro positivo suportado pelo tipo de inteiro regular do Python. Isso é pelo menos 2 ** 31-1. O maior inteiro negativo é -maxint-1 - a assimetria resulta do uso da aritmética binária do complemento de 2.

sys.maxsize O maior inteiro positivo suportado pelo tipo Py_ssize_t da plataforma e, portanto, o tamanho máximo que listas, strings, dicts e muitos outros contêineres podem ter.

e para completar, aqui está a versão Python 3 :

sys.maxsize Um inteiro que fornece o valor máximo que uma variável do tipo Py_ssize_t pode assumir. Geralmente é 2 ^ 31-1 em uma plataforma de 32 bits e 2 ^ 63-1 em uma plataforma de 64 bits.

flutua:

Existe float("inf")e float("-inf"). Eles podem ser comparados a outros tipos numéricos:

>>> import sys
>>> float("inf") > sys.maxsize
True
keyer
fonte
Tentei o mesmo código, mas ele ainda mostra o tipo como int em python 3 na máquina com Windows de 64 bits. Qualquer motivo valioso para isso.
ManojP
1
@ManojP É porque não há mais um limite para o tamanho dos inteiros no Python 3. Veja a primeira citação de bloco. Vou editar para esclarecer que o exemplo é Python 2
keyser de
39

Python longpode ser arbitrariamente grande. Se precisar de um valor maior do que qualquer outro valor, você pode usar float('inf'), pois o Python não tem problemas para comparar valores numéricos de diferentes tipos. Da mesma forma, para um valor menor do que qualquer outro valor, você pode usar float('-inf').

Taymon
fonte
1
então ele retorna um valor muito grande, não é?
Sreevisakh
4
Ele retorna infinito de ponto flutuante, que é maior do que qualquer número finito.
Taymon,
4
Devo dizer que essa resposta é definitivamente a que está mais perto de ser correta em termos de resposta à pergunta do título do OP. Isto é, "como você obtém um valor sentinela do Python que será maior do que todas as suas entradas (ou pelo menos não menor do que o maior valor)?". Portanto, votei positivamente nesta resposta, mas acho que é melhor se o OP aprender a pensar em Python.
John Y
Acordado. Dito isso, estive em uma situação em que essa era a única maneira de fazer o que precisava.
Taymon,
21

Resposta direta à pergunta do título:

Os inteiros são ilimitados em tamanho e não têm valor máximo em Python.

Resposta que aborda o caso de uso subjacente declarado:

De acordo com o seu comentário sobre o que está tentando fazer, você está pensando em algo na linha de

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

Não é assim que se pensa em Python. Uma tradução melhor para Python (mas ainda não a melhor) seria

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

Observe que o acima não usa MAXINT. Essa parte da solução se aplica a qualquer linguagem de programação: você não precisa saber o maior valor possível apenas para encontrar o menor valor em uma coleção.

Mas de qualquer forma, o que você realmente faz em Python é apenas

minval = min(a)

Ou seja, você não escreve um loop. A min()função integrada obtém o mínimo de toda a coleção.

John Y
fonte
8

longtipo em Python 2.x usa aritmética de precisão arbitrária e não tem valor máximo possível. É limitado pela memória disponível. Python 3.x não tem nenhum tipo especial para valores que não podem ser representados pelo número inteiro nativo da máquina - tudo é inte a conversão é tratada nos bastidores.

rkhayrov
fonte
7

Ao contrário de C / C ++, Long em Python tem precisão ilimitada. Consulte a seção Tipos numéricos em python para obter mais informações. Para determinar o valor máximo do inteiro, você pode apenas consultar sys.maxint. Você pode obter mais detalhes na documentação do sys .

Abhijit
fonte
1

Você pode usar: o valor máximo de float é

float('inf')

para negativo

float('-inf')
Ramazan
fonte
2
O título é "Valor máximo para inteiro longo" , não o valor máximo de float. Portanto, sem uma explicação de como isso responde à pergunta, considero este NAA (não uma resposta).
Sнаđошƒаӽ
0

Em python3, você pode enviar o valor float para a função int e obter esse número 1,7976931348623157e + 308 na representação inteira.

import sys    
int(sys.float_info.max)
Frédéric Jacques
fonte
Isso não faz nada de útil. Para ilustrar isso, tente int (sys.float_info.max) +1 e você obterá apenas um inteiro que é mais um, porque como outros comentários explicados, o Python apenas armazena inteiros de precisão ilimitados.
tialaramex 01 de