Pregunta

Esto parece una pregunta mejor dirigida a aquellos con alguna experiencia de programación en lugar de solo usuarios generales de Excel, de ahí que haya preguntado aquí en lugar de Superuser.

¿Hay alguna forma, preferiblemente a través de una función, para devolver Epsilon (es decir, el número más pequeño no cero representable en los cálculos de Excel)? Si no se puede recuperar a través de una función, ¿hay una manera rápida de calcularla a través de una función compacta?

Para ser claros, no estoy buscando una solución basada en VBA, me gustaría una solución basada en una fórmula de Excel/ hoja de cálculo que no requiere ejecutar macros.

Mis búsquedas en línea han presentado principalmente discusiones sobre cómo mostrar el símbolo Epsilon.

Gracias.

¿Fue útil?

Solución

Excel siempre opera en los dobles IEEE.

Una expresión no VBA que le brindará el número de punto flotante no denomalizado más pequeño que es mayor que 0 es

=2^-1022

La máquina Epsilon, por otro lado, es el número más pequeño que se puede agregar a 1 y da como resultado un número que es mayor que 1. Para la doble precisión está dada por

=2^-52

Otros consejos

Microsoft define sus límites de precisión de número de punto flotante para XL. El número de punto flotante más pequeño se enumera como 2.2250738585072e-308 en el ID de artículo de soporte de Microsoft: 78113. Cuando ingreso este número en mi hoja de cálculo, en realidad almacena un punto flotante 0, pero si almaceno 2.2250738585073e-308, (agregué 1 al dígito menos significativo) puedo ver todos los dígitos. Veo que le pidió una máquina Epsilon, pero como está utilizando XL, lo que realmente verá es la biblioteca de puntos flotantes C/C ++ Epsilon. Ver el Tema de Microsoft Developer Network XLFregister (Formulario 1).

Puede escribir una subrutina VBA como:

 Public Sub ComputeMachineEpsilon()
     Dim g, ex, eps As Double
     Dim i As Long
     g = 1
     i = 0
     Do
        i = i + 1
        g = g / 2
        ex = g * 0.98 + 1
        ex = ex - 1
        If ex > 0 Then eps = ex
     Loop While ex > 0

     MsgBox ("No. of Iterations " & i)
     MsgBox ("Machine Epsilon is " & eps)

    End Sub

Pero en mi máquina le da 2,22e-16, y es extraño porque puedo escribir =2^-113 en una celda y obtenga 9.62965E-35.

EDITAR:

=1*(0,5-0,4-0,1)

Obtengo: -2,78e -17

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top