Valore massimo per intero lungo


108

Come posso assegnare il valore massimo per un intero lungo a una variabile, simile, ad esempio, a C ++ LONG_MAX.


7
Non sono affatto sicuro che gli interi Python siano limitati. Nel momento in cui attraversi sys.maxint, la rappresentazione interna cambia da int a long, che ha una presunzione illimitata.
tchap

Ho chiesto perché ho bisogno di trovare un valore minimo tra un gruppo di valori uno per uno Quindi prima devo memorizzare un valore grande in una variabile in modo da poterlo confrontare con gli altri
Sreevisakh

2
Per il tuo commento, ti consiglio di utilizzare la funzione integrata min.
Jiri

5
Non hai bisogno del valore massimo se stai solo cercando di trovare il minimo, anche se stai programmando in C ++ o qualsiasi altro linguaggio. Se vuoi comunque scorrere tutti gli elementi, usa semplicemente il primo elemento come valore iniziale. (Ma meglio usare la minfunzione, se vuoi davvero programmare in Python!)
John Y

3
@Sreevisakh: per il "grande valore", l'uso infinito float("inf"). O meglio, usa la minfunzione incorporata.
Fred Foo

Risposte:


132

Numeri interi lunghi:

Non esiste un limite definito in modo esplicito. La quantità di spazio degli indirizzi disponibile costituisce un limite pratico.
(Tratto da questo sito). Guarda i documenti sui tipi numerici dove lo vedrai Long integers have unlimited precision. In Python 2, gli interi passeranno automaticamente ai long quando crescono oltre il loro limite:

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


per interi abbiamo

maxint e maxsize:

Il valore massimo di un int può essere trovato in Python 2.x con sys.maxint. È stato rimosso in Python 3, ma sys.maxsizespesso può essere utilizzato al suo posto. Dal changelog :

La costante sys.maxint è stata rimossa, poiché non esiste più un limite al valore degli interi. Tuttavia, sys.maxsize può essere utilizzato come numero intero più grande di qualsiasi elenco pratico o indice di stringa. È conforme alla dimensione intera "naturale" dell'implementazione ed è tipicamente uguale a sys.maxint nelle versioni precedenti sulla stessa piattaforma (assumendo le stesse opzioni di compilazione).

e, per chiunque sia interessato alla differenza (Python 2.x):

sys.maxint Il più grande numero intero positivo supportato dal normale tipo intero di Python. Questo è almeno 2 ** 31-1. Il numero intero negativo più grande è -maxint-1 - l'asimmetria risulta dall'uso dell'aritmetica binaria del complemento di 2.

sys.maxsize Il numero intero positivo più grande supportato dal tipo Py_ssize_t della piattaforma, e quindi la dimensione massima consentita per elenchi, stringhe, dict e molti altri contenitori.

e per completezza, ecco la versione di Python 3 :

sys.maxsize Un numero intero che fornisce il valore massimo che una variabile di tipo Py_ssize_t può assumere. Di solito è 2 ^ 31 - 1 su una piattaforma a 32 bit e 2 ^ 63 - 1 su una piattaforma a 64 bit.

galleggianti:

C'è float("inf")e float("-inf"). Questi possono essere confrontati con altri tipi numerici:

>>> import sys
>>> float("inf") > sys.maxsize
True

Ho provato lo stesso codice ma mostra ancora il tipo come int in Python 3 su una macchina Windows a 64 bit. Qualsiasi motivo prezioso per questo.
ManojP

1
@ManojP È perché non c'è più un limite alla dimensione degli interi in Python 3. Vedi la prima citazione di blocco.
Modificherò

39

Python longpuò essere arbitrariamente grande. Se hai bisogno di un valore maggiore di qualsiasi altro valore, puoi usarlo float('inf'), poiché Python non ha problemi a confrontare valori numerici di diversi tipi. Allo stesso modo, per un valore inferiore a qualsiasi altro valore, puoi utilizzare float('-inf').


1
quindi restituisce un valore molto grande vero?
Sreevisakh

4
Restituisce infinito in virgola mobile, che è maggiore di qualsiasi numero finito.
Taymon

4
Devo dire che questa risposta è sicuramente la più vicina da correggere in termini di risposta alla domanda del titolo dell'OP. Cioè, "come si ottiene un valore sentinella Python che sarà più grande di tutto il tuo input (o almeno non più piccolo del valore più grande)?". Quindi ho votato contro questa risposta, ma penso che sia meglio se l'OP impara invece a pensare in Python.
John Y

Concordato. Detto questo, mi sono trovato in una situazione in cui questo era l'unico modo per fare ciò di cui avevo bisogno.
Taymon

21

Risposta diretta alla domanda sul titolo:

I numeri interi hanno dimensioni illimitate e non hanno un valore massimo in Python.

Rispondi a quali indirizzi il caso d'uso sottostante dichiarato:

Secondo il tuo commento su ciò che stai cercando di fare, stai attualmente pensando qualcosa sulla falsariga di

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

Non è così che si pensa in Python. Una traduzione migliore in Python (ma ancora non la migliore) sarebbe

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

Nota che quanto sopra non usa affatto MAXINT. Quella parte della soluzione si applica a qualsiasi linguaggio di programmazione: non è necessario conoscere il valore più alto possibile solo per trovare il valore più piccolo in una raccolta.

Ma comunque, quello che fai veramente in Python è solo

minval = min(a)

Cioè, non scrivi affatto un ciclo. La min()funzione incorporata ottiene il minimo dell'intera raccolta.


8

longil tipo in Python 2.x utilizza aritmetica di precisione arbitraria e non ha nulla come il valore massimo possibile. È limitato dalla memoria disponibile. Python 3.x non ha un tipo speciale per i valori che non possono essere rappresentati dall'intero della macchina nativa: tutto è inte la conversione viene gestita dietro le quinte.


7

A differenza di C / C ++ Long in Python hanno una precisione illimitata. Fare riferimento alla sezione Tipi numerici in python per maggiori informazioni. Per determinare il valore massimo dell'intero puoi semplicemente fare riferimento sys.maxint. Puoi ottenere maggiori dettagli dalla documentazione di sys .


1

Puoi usare: il valore massimo di float è

float('inf')

per negativo

float('-inf')

2
Il titolo è "Valore massimo per intero lungo" , non valore massimo di float. Quindi, senza una spiegazione di come questo risponde alla domanda, considero questo NAA (non una risposta).
Sнаđошƒаӽ

0

In python3, puoi inviare il valore float nella funzione int ottenendo quel numero 1.7976931348623157e + 308 in rappresentazione intera.

import sys    
int(sys.float_info.max)

Questo non fa nulla di utile. Per illustrare ciò, prova int (sys.float_info.max) +1 e otterrai solo un intero che è uno in più, perché come hanno spiegato altri commenti Python memorizza solo numeri interi di precisione illimitati.
tialaramex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.