Je rétroportage mon projet de Python 2.6 à Python 2.4 et 2.5. Dans mon projet j'ai utilisé float("inf")
, et maintenant je trouve qu'il est indisponible sur Python 2.5. Y a-t-il un backport?Backporting float ("inf") vers Python 2.4 et 2.5
Répondre
J'ai créé un backport, testé sur Python 2.5+, peut probablement être facilement fait de travailler sur Python 2.4:
https://github.com/cool-RR/GarlicSim/blob/master/garlicsim/garlicsim/general_misc/infinity.py
épelant soit le long chemin ou le chemin court fonctionne 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 suivants en tant que commande Python. »
PEP754 (qui a été rejetée) ne mentionne votre problème sur les valeurs spéciales IEEE-754. Il suggère d'utiliser quelque chose comme 1e300000
pour générer un débordement à virgule flottante et créer inf
, mais il note que c'est moche et pas garanti d'être portable.
Je ne sais pas ce que cet indicateur '-c' est, mais en Python 2.4 sous Windows XP, il semble qu'il n'y ait pas de float ('inf')', ni 'float ('infinity')'. Il soulève: 'ValueError: littéral invalide pour float(): inf' –
Python float utilise des flottants matériels, donc le comportement peut dépendre de la plate-forme. Pour les modifications, voir "De nombreuses fonctionnalités à virgule flottante ont été ajoutées". http://docs.python.org/whatsnew/2.6.html – u0b34a0f6ae
fonctionne pour moi sur linux python 2.4.3 et osx python 2.5.6; La plate-forme Win32 ne suit pas la sémantique IEEE, ou vous avez une très ancienne version de Python. –
Vous devriez être en mesure de faire semblant en donnant à Python une constante à virgule flottante suffisamment grande à la place. Par exemple:
>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True
Le module decimal est disponible depuis Python 2.4 et prend en charge les décimales infinies positives ou négatives. Il ne se comporte pas toujours comme un flottant (par exemple en ajoutant un nombre décimal et un flottant n'est pas supporté) mais fait la bonne chose pour la comparaison, ce qui était assez bon pour moi.
>>> decimal.Decimal('Infinity') > 1e300
True
emprunt NumPy pour quelques lignes:
import numpy as np
inf = float(np.inf)
Ici, inf
est un regular python float
, donc vous n'avez plus besoin de vous embêter avec NumPy.
- 1. SHA256 hachage en Python 2.4
- 2. VIM: Utilisez Python 2.5 avec vim 7.2
- 3. Python 2.4 plistlib sur Linux
- 4. Comment construire sqlite pour Python 2.4?
- 5. Convertisseur Python 2.5 en Python 2.2
- 6. Problème de compatibilité Python 2.5 et 2.6 et Numpy
- 7. python Littéral invalide pour float
- 8. Python 2.5 socket._fileobject est quoi dans Python 3.1?
- 9. Chemin du séparateur char en python 2.4
- 10. incompatibilité de journalisation Python entre 2.5 et 2.6
- 11. Pylônes - utilisez Python 2.5 ou 2.6?
- 12. Faire une façade en Python 2.5
- 13. Random in python 2.5 ne fonctionne pas?
- 14. Comment définir le délai d'expiration de smtplib en python 2.4?
- 15. Le répertoire de travail actuel n'est plus hérité du processus d'appel à partir de python 2.5?
- 16. Dans Python 2.4, comment puis-je supprimer les caractères après ';'?
- 17. Droite Float et conteneurs div
- 18. comment analyser les fichiers inf de Windows pour python?
- 19. directives web-inf et jsp page
- 20. Problèmes sur un module de sélection sur Python 2.5
- 21. Comment décaper les objets Inf de numpy?
- 22. Comment créer un PyMe (bibliothèque Python) Exécuter en Python 2.4 sous Windows?
- 23. Comment puis-je désactiver la citation dans le lecteur Python 2.4 CSV?
- 24. Ruby round float to_int si nombre entier
- 25. Pourquoi le mot-clé DateField.input_formats n'est-il pas reconnu dans django 1.0.2 et Python 2.5?
- 26. Rétablissement d'un projet Python/Cocoa pour utiliser l'OSX 10.5 Python par défaut (2.5)
- 27. Java - int/long, float/double
- 28. NSNumberFormatter et SpellOutStyle avec des valeurs Float
- 29. Utiliser le module de sous-processus Python 2.6 en Python 2.5
- 30. Conversion d'un hexagone en float
L'astuce 1e100000 échoue de manière aléatoire sur Windows XP. Il devient parfois juste 1.0. Donc, c'est hors de question. Il doit y avoir une classe pour l'Infini. –