2011-01-03 12 views

risposta

114

Python ha numeri interi di precisione arbitrari, quindi non esiste un massimo fisso reale. Sei limitato solo dalla memoria disponibile.

In Python 2, esistono due tipi, int e long. int s usano un tipo C, mentre long s sono precisione arbitraria. È possibile utilizzare sys.maxint per trovare il massimo int. Ma int s sono promossi automaticamente long, in modo che di solito non c'è bisogno di preoccuparsi:

sys.maxint + 1 

funziona bene e restituisce una long.

sys.maxint non esiste nemmeno in Python 3, poiché int e long vennero unificati in un unico precisione arbitraria int tipo.

+26

Si noti che in Python 3 (e Python 2.6 e versioni successive) 'sys.maxsize' può essere utilizzato quando è necessario un valore di dimensioni arbitrarie. – mattdm

+0

ce n'è uno che non è lungo? –

+0

'sys.maxsize' continua ad essere il limite teorico sulla dimensione dei contenitori per Python 2 e 3 (teorico perché la memoria è il vero fattore limitante) –

0
import re 
import sys 
import platform 
import struct 

formats = { 
      "int":{"p_type":"integer", "format":"i"}, 
      "float":{"p_type":"float", "format":"f"}, 
      "double":{"p_type":"float", "format":"d"} 
      }  

sys_bit = int(re.findall(r"\d+", platform.architecture()[0])[0])/8 
for k,v in formats.iteritems(): 
    print "max {0} {1}".format(k, 2**struct.Struct(v["format"]).size*sys_bit-1)-1) 
    print "min {0} {1}".format(k, -2**struct.Struct(v["format"]).size*sys_bit-1)) 
Problemi correlati