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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top