2010-05-27 9 views

risposta

52

In python 2.6 È portatile se la CPU supporta

La funzione float() ora ruotare la stringa nan in IEEE 754 non è un valore numero e + inf e -inf in infinito positivo o negativo. Questo funziona su qualsiasi piattaforma con semantica IEEE 754 .

+1

Cosa accade su piattaforme senza IEEE 754 semantica? – fmark

+14

@fmark: buona fortuna trovare una piattaforma su cui Python gira ma che non ha la semantica IEEE 754. In teoria, 'float ('inf')' dovrebbe generare 'ValueError' su queste piattaforme, ma a mia conoscenza questo comportamento non è mai stato testato, perché Python (beh, le versioni recenti di Python, almeno) non hanno ancora incontrato un tale piattaforma. In pratica non ti preoccupare. –

12

non è portabile come in non portatile indietro a Python 2.5 quando l'uscita della stringa varia tra piattaforme. Dal 2.6 in poi è garantito che lo float('inf') funzioni su piattaforme di conformità IEEE-754 (riferimento: http://www.python.org/dev/peps/pep-0754/).

(e la raccomandazione sembra essere nel range 1e30000, non solo 1e400.)

10

Forse si potrebbe fare qualcosa di simile

try: 
    inf = float('inf') 
except: # check for a particular exception here? 
    inf = 1e30000 
+5

+1. 'float ('inf')' è decisamente da preferire, in generale. È anche possibile che 'inf = 1e30000' possa iniziare a generare 'OverflowError' invece di produrre un infinito in alcune versioni future di Python. –