Backporting galleggiante ( “inf”) per Python 2.4 e 2.5
Domanda
Sono backport il mio progetto da Python 2.6 a Python 2.4 e 2.5. Nel mio progetto ho usato float("inf")
, e ora mi trovo non è disponibile in Python 2.5. Esiste un backport di esso?
Soluzione 4
ho creato un backport, testato su Python 2.5+, probabilmente può essere fatto facilmente per lavorare su Python 2.4:
Altri suggerimenti
Ortografia esso sia la strada più lunga o il modo in breve funziona bene per me:
$ python2.4 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('infinity')+200"
inf
$ python2.4 -c "print float('infinity')+200"
inf
Il flag -c
significa "eseguire le seguenti argomenti come comando Python."
PEP754 (che è stata respinta) non menziona il problema su speciale valori IEEE-754. Si suggerisce di utilizzare qualcosa come 1e300000
per generare un overflow in virgola mobile e creare inf
, ma lo fa notare che questa è brutta e non è garantito per essere portabile.
Si dovrebbe essere in grado di fingere da dare Python un numero sufficientemente ampio in virgola mobile costante, invece. Per esempio:
>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
Il decimale modulo è disponibile dal Python 2.4 e supporta infiniti decimali positivi o negativi. Non sempre si comporta come un galleggiante (ad es. L'aggiunta di un decimale e un flottante non è supportato), ma fa la cosa giusta per il confronto, che era abbastanza buono per me.
>>> decimal.Decimal('Infinity') > 1e300
True
Prendendo in prestito NumPy per un paio di righe:
import numpy as np
inf = float(np.inf)
Qui, inf
è un regolare pitone float
, in modo da don 't bisogno di perdere tempo con NumPy ulteriormente.