¿Cómo escribo un literal infinito de punto flotante en Python?


76

¿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:


63

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.


15
@fmark: Buena suerte para encontrar una plataforma en la que se ejecute Python pero que no tenga semántica IEEE 754. En teoría, float('inf')debería plantearse ValueErroren 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.
Mark Dickinson

16

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).


11

Quizás podrías hacer algo como esto

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

6
+1. float('inf')definitivamente es preferible, en general. Incluso es posible que 'inf = 1e30000` comience a subir en OverflowErrorlugar de producir un infinito en alguna versión futura de Python.
Mark Dickinson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.