flotteur rétroportage ( « inf ») à Python 2.4 et 2.5
Question
Je rétroportage mon projet de Python 2.6 à Python 2.4 et 2.5. Dans mon projet, je float("inf")
, et je trouve qu'il est disponible sur Python 2.5. Est-il un portage de celui-ci?
La solution 4
J'ai créé un backport, testé sur Python 2.5+, peut probablement être facilement fait de travailler sur Python 2.4:
Autres conseils
Orthographe qu'il soit le long chemin ou le chemin court fonctionne très bien pour moi:
$ 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
Le drapeau -c
signifie "exécuter les arguments ci-après en tant que commande de python".
PEP754 (qui a été rejetée) ne mentionne votre question au sujet spécial valeurs IEEE-754. Il suggère d'utiliser quelque chose comme 1e300000
pour générer un débordement de virgule flottante et de créer inf
, mais il ne note que ceci est laid et non garantie à être portables.
Vous devriez être en mesure de faire semblant par Python donnant un point flottant suffisamment grande constante à la place. Par exemple:
>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
Le module décimal est disponible à partir du python 2.4 et supporte des nombres décimaux infinite positifs ou négatifs. Il ne se comporte pas toujours comme un flotteur (par exemple. L'ajout d'une virgule et un flotteur est pas pris en charge), mais fait la bonne chose pour la comparaison, ce qui était assez bon pour moi.
>>> decimal.Decimal('Infinity') > 1e300
True
Emprunts NumPy pour quelques lignes:
import numpy as np
inf = float(np.inf)
Ici, inf
est un float
régulier python , de sorte que vous don « pas besoin de se soucier de NumPy plus loin.