Obtenez la machine Epsilon à Microsoft Excel
Question
Cela semble être une question mieux adressée à ceux qui ont une certaine expérience de programmation plutôt que des utilisateurs généraux d'Excel, d'où ma demande ici par opposition à SuperUser.
Existe-t-il un moyen, de préférence via une fonction, de retourner Epsilon (c'est-à-dire le plus petit nombre non nul représentable dans les calculs d'Excel)? S'il n'est pas récupérable via une fonction, existe-t-il un moyen rapide de le calculer via une fonction compacte?
Pour être clair, je ne cherche pas de solution basée sur VBA, je voudrais une solution basée sur une formule / feuille de calcul Excel qui ne nécessite pas d'exécution de macros.
Mes recherches en ligne ont principalement présenté des discussions sur la façon d'afficher le symbole Epsilon.
Merci.
La solution
Excel fonctionne toujours sur les doubles IEEE.
Une expression non VBA qui vous amènera le plus petit nombre de points flottants non réinormalisés supérieur à 0 est
=2^-1022
Machine Epsilon, en revanche, est le plus petit nombre qui puisse être ajouté à 1 et entraîner un nombre supérieur à 1. Pour la double précision, il est donné par
=2^-52
Autres conseils
Microsoft définit ses limites de précision du numéro de point flottant pour XL. Le plus petit numéro de point flottant est répertorié comme 2.2250738585072E-308 dans le ID de l'article de support Microsoft: 78113. Lorsque j'entre ce numéro dans ma feuille de calcul, il stocke en fait un point flottant 0, mais si je stockage 2.2250738585073E-308, (j'ai ajouté 1 au chiffre le moins significatif), je peux voir tous les chiffres. Je vois que vous avez demandé une machine epsilon, mais comme vous utilisez XL, ce que vous verrez vraiment, c'est la bibliothèque à points flottants C / C ++ Epsilon. Voir le Microsoft Developer Network XLFRegister (Form 1) Sujet.
Vous pouvez écrire un sous-programme VBA comme:
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
Mais sur ma machine, il donne 2,22E-16, et c'est étrange parce que je peux écrire =2^-113
dans une cellule et obtenir 9 62965E-35.
ÉDITER:
=1*(0,5-0,4-0,1)
Je comprends: -2,78e-17