¿Cómo escribo un literal infinito de punto flotante en Python?
he oído
inf = float('inf')
no es portátil. Por lo tanto, me han recomendado lo siguiente:
inf = 1e400
¿Alguno de estos es estándar o portátil? ¿Cuál es la mejor práctica?
Respuestas:
En python 2.6 es portátil si la CPU lo admite
La función float () ahora convertirá la cadena nan en un valor IEEE 754 Not A Number, y + inf y -inf en infinito positivo o negativo. Esto funciona en cualquier plataforma con semántica IEEE 754.
float('inf')
no es portátil como no es portátil de nuevo a Python 2.5 cuando la salida de la cadena varía entre plataformas. A partir de 2.6 float('inf')
se garantiza que funciona en plataformas compatibles con IEEE-754 (ref: http://www.python.org/dev/peps/pep-0754/ ).
(Y la recomendación parece estar en el rango 1e30000, no solo 1e400).
Quizás podrías hacer algo como esto
try:
inf = float('inf')
except: # check for a particular exception here?
inf = 1e30000
float('inf')
definitivamente es preferible, en general. Incluso es posible que 'inf = 1e30000` comience a subir en OverflowError
lugar de producir un infinito en alguna versión futura de Python.
float('inf')
debería plantearseValueError
en estas plataformas, pero que yo sepa, este comportamiento nunca se ha probado, porque Python (bueno, las versiones recientes de Python, al menos) aún tiene que cumplir con dicha plataforma. En la práctica, no se preocupe por eso.