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

fmark
fuente

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.

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

Kennytm
fuente
11

Quizás podrías hacer algo como esto

try:
    inf = float('inf')
except:  # check for a particular exception here?
    inf = 1e30000
John La Rooy
fuente
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