2013-06-08 10 views
6

Spec: Python 3.3.1Python-Come determinare più grande/piccolo int/lungo/float/numeri complessi mio sistema in grado di gestire

Quello che stavo cercando di fare: "Utilizzo di Python, determinare il Ints, longs, float e numeri complessi più grandi e più piccoli che il tuo sistema è in grado di gestire. "

Cosa ho fatto: Sono passato attraverso i moduli matematici di Python e tutte le funzioni incorporate relative a matematica e numeri, ma non sono riuscito a trovare un modo per farlo. Ho anche provato qualcosa come max(range(0,)) ma ha restituito l'errore ValueError: max() arg is an empty sequence.

Domanda: Come determinare i numeri int/long/float/complessi più grandi/più piccoli che il mio sistema può gestire utilizzando Python? Come principiante assoluto, so di aver perso qualcosa, ma ho provato e non sono stato in grado di capirlo. Apprezzo il vostro aiuto!

+0

Non esiste il numero intero o il più piccolo intero in Python 3, poiché viene utilizzata una precisione arbitraria.I numeri complessi non sono completamente ordinati, quindi non esiste il numero più grande o più piccolo. (Ad esempio, 1 non è né minore di, uguale a, né maggiore di * i *.) – chepner

+1

Grazie per il punto l'altro thread out! Bene visto che non ha risposto alla parte "lunga, fluttua, numeri complessi" della mia domanda (o è andata? Mi è sfuggito qualcosa?), Potrei anche lasciare questo thread qui così se qualcuno chiedesse di long/float/complex potrebbe averne bisogno? – hakuna121

+0

@chepner grazie per aver dedicato del tempo! Perdonami per questo, ma non comprendo pienamente la 'precisione arbitraria' che hai menzionato. Significa che dipende dalla dimensione della memoria della scatola? E se è così, c'è un modo per vedere il risultato nell'interprete? Grazie! – hakuna121

risposta

10

I limiti numerici pitone, quali ve ne sono, sono disponibili sul sys module:

  • sys.float_info è una tupla denominata con floating point limitazioni per la piattaforma. I numeri in virgola mobile sono costituiti da un esponente e da una precisione; dovresti essere più preciso su ciò che intendi per il numero più grande qui; il numero con l'esponente più grande e la precisione totale in uso è sys.float_info.max.

  • sys.int_info; non tanto i limiti quanto i dettagli di implementazione; dovresti essere in grado di stimare il più grande numero intero possibile da questo. Gli interi Python sono limitati solo dalla tua memoria disponibile.

  • sys.maxsize; la dimensione della parola della piattaforma e il limite di liste e tuple e simili.

Così per gli interi, non v'è fondamentalmente un limite soft ai valori massimi e minimi. Dipende dalla quantità di memoria che il tuo processo può utilizzare e dalla quantità di memoria che il tuo processo sta già utilizzando per altre cose.

In Python 3, non esiste più un long tipo separato, ma in Python 2, sys.maxsize + 1 avrebbe dovuto essere un long, come sarebbe -sys.maxsize - 2. Tra questi due estremi si trova la gamma di possibili interi "brevi".

Per numeri complessi, l'ordine è un po 'più .... complesso comunque. I numeri complessi hanno un componente reale e immaginario, entrambi sono galleggianti. Indovina un po? Questi sono float python e hai già le loro informazioni limite sopra:

>>> type(1j) 
<type 'complex'> 
>>> type(1j.real) 
<type 'float'> 
>>> type(1j.imag) 
<type 'float'> 
+0

Molto bene detto. Grazie mille! – hakuna121

+0

Io uso Python 2.7.3 e non c'è 'sys.int_info', ma' sys.long_info' –

+0

corretto; la domanda è stata taggata con 'python-3.x' quindi mi sono concentrato su quella versione. Python 3 ha rimosso la distinzione tra 'long' e' int' del tutto. Poiché le informazioni documentano come viene gestito Python 2 'long', il nome di attributo 2.x' sys' lo riflette naturalmente. –

4

sys.float_info fornisce le informazioni desiderate per i valori in virgola mobile.

>>> sys.float_info.max 
1.7976931348623157e+308 

Python 3 non ha limiti superiore o inferiore interi, ed esiste alcuna definizione matematica per ordinare numeri complessi arbitrari (anche se le parti reali o immaginari di due numeri complessi possono essere ordinati separatamente).

+0

Grazie per la risposta! Anche se sul mio sistema con Python 3.3.1 è 'sys.float_info'. Ma il fatto che tu abbia indicato tutto questo percorso è molto utile. Grazie! – hakuna121

+0

corretto. Mi sono confuso, dato che 'sys.float_info' è un'istanza della classe' sys.floatinfo'. – chepner

+0

Non capisco ancora cosa intendi. Ma se è perché ho perso qualcosa, mi scuso sinceramente, principiante assoluto di Python! – hakuna121