[python] numeric limits

n4rc0s n4rc0s@gmail.com
Ven 11 Maggio 2007 20:18:52 CEST


Sergio Perticone wrote:
> Sergio Perticone wrote:
>   
>> Esiste in python qualcosa che equivale al C++-ish:
>>     std::numeric_limits<>::max()
>>
>> ?
>>
>> Grazie,
>>
>> s.
>>
>>     
>
> Uhm, ho trovato sys.maxint
>
> s.
>   

no aspetta le cose non stanno proprio così :-)

per gli interi ci sono due tipi: int e long. Sono stati unificati a 
partire dal 2.3. Credo ciò significhi
che te ne puoi tranquillamente infischiare: è l'interprete che decide se 
usare l'uno o l'altro... Il limite maxint
è per gli int. I long non hanno upper bound. Se non capisco male quello 
che succede è che se fai operazioni con
int e superi il limite lui li converte silenziosamente in long e 
continua tranquillo. I long invece restano long. Non viene effettuata 
nessuna conversione implicita da long a int. La devi esplicitare con un 
cast, ma se vai fuori del limite ottieni nuovamente un long.

[QUOTE]
integers (type |int|) are implemented with C longs (signed 32 bits, 
maximum value is |sys.maxint|)
Long integers (type |long|) have unlimited size (only limit is system 
resources).
[/QUOTE]

vediamo un po'...

[CODE]
 >>> import sys
 >>> a=sys.maxint
 >>> a
2147483647
 >>> type(a)
<type 'int'>
 >>> a+=1
 >>> type(a)
<type 'long'>
 >>> a
2147483648L
 >>> a/=2
 >>> a
1073741824L
 >>> type(a)
<type 'long'>

... a proposito dei cast...

 >>> a=sys.maxint
 >>> a+=1
 >>> type(a)
<type 'long'>
 >>> type(int(a))
<type 'long'>
[/CODE]

come vedi il cast a int ha restituito un long perché eravamo fuori dal 
limite.

get the picture?

ciao
  n4



Maggiori informazioni sulla lista palermo