Saltar al contenido

Máquina épsilon en Python

Agradecemos tu ayuda para compartir nuestras secciones con relación a las ciencias informáticas.

Solución:

Los números de coma flotante tienen cierta precisión, con unos pocos decimales en notación científica. Cuanto mayor sea el número, mayor será el dígito menos significativo en esa representación y, por lo tanto, mayor será el “épsilon” que podría contribuir a ese número.

Por lo tanto, el epsilon es relativo al número al que se agrega, que de hecho se establece en la documentación que citó: “… tal que 1.0 + eps! = 1.0”. Si el número de “referencia” es más pequeño, por ejemplo, en un orden de magnitud, entonces eps también es más pequeño.

Si ese no fuera el caso, no podrías calcular en absoluto con números más pequeños que eps (2.2e-16 en mi caso).

En este caso, en realidad no quieres np.finfo. lo que quieres es np.spacingque calcula la distancia entre la entrada y el siguiente número más grande que se puede representar exactamente.

Esencialmente, np.spacing calcula “eps” para cualquier número dado. Utiliza el tipo de datos del número (los flotantes nativos de Python son flotantes de 64 bits), por lo que un np.float32 o np.float16 dará una respuesta diferente a la de un flotante de 64 bits.

Por ejemplo:

import numpy as np

print 'Float64, 1.0 -->', np.spacing(1.0)
print 'Float64, 1e12 -->', np.spacing(1e12)
print 'Float64, 1e-12 -->', np.spacing(1e-12)
print ''
print 'Float32, 1.0 -->', np.spacing(np.float32(1.0))
print 'Float32, 1e12 -->', np.spacing(np.float32(1e12))
print 'Float32, 1e-12 -->', np.spacing(np.float32(1e-12))

Cuyos rendimientos:

Float64, 1.0 --> 2.22044604925e-16
Float64, 1e12 --> 0.0001220703125
Float64, 1e-12 --> 2.01948391737e-28

Float32, 1.0 --> 1.19209e-07
Float32, 1e12 --> 65536.0
Float32, 1e-12 --> 1.0842e-19

Tienes la opción de ayudar nuestra investigación poniendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *