Epsilon
Epsilon est la plus petite valeur qui peut être ajouté à 1,0 et produire un résultat qui est à distinguer de 1,0. Comme l'a suggéré Poita_, ceci est utile pour traiter les erreurs d'arrondi. La situation est assez simple: un nombre à virgule flottante normal a une précision qui reste fixe, quelle que soit l'ampleur du nombre. Pour le dire légèrement différemment, il calcule toujours le même nombre de chiffres significatifs. Par exemple, une implémentation typique de double
aura environ 15 chiffres significatifs (ce qui se traduit par Epsilon = ~ 1e-15). Si vous travaillez avec un nombre compris entre 10 et 200, le plus petit changement qu'il peut représenter sera environ 10 à 215. Si vous travaillez avec un nombre dans la plage 10e + 200, le plus petit changement qu'il peut représenter sera d'environ 1e + 185.
L'utilisation significative d'Epsilon nécessite normalement de l'adapter à la plage des nombres avec lesquels vous travaillez, et de l'utiliser pour définir une plage que vous acceptez probablement comme étant due à des erreurs d'arrondi, donc si deux nombres cette gamme, vous supposez qu'ils sont probablement vraiment égaux. Par exemple, avec Epsilon de 1e-15, vous pouvez décider de traiter les nombres qui se situent entre 1 et 14 l'un de l'autre comme égaux (c'est-à-dire que le chiffre significatif a été perdu pour arrondir).
Le plus petit nombre qui peut être représenté sera normalement considérablement plus petit que cela. Avec ce même double
typique, il va généralement être autour de 1e-308. Cela équivaudrait à Epsilon si vous utilisiez des nombres à virgule fixe au lieu de nombres à virgule flottante. Par exemple, à un moment donné, plusieurs personnes utilisaient un point fixe pour divers graphiques. Une version type était un nombre entier de bits de 16 bits divisé en quelque chose comme 10 bits avant le point décimal et six bits après le point décimal. Un tel nombre peut représenter des nombres d'environ 0 à 1024, avec environ deux chiffres (décimaux) après le point décimal. Alternativement, vous pouvez le traiter comme signé, en cours d'exécution (environ) -512 à +512, encore avec environ deux chiffres après la virgule décimale.
Dans ce cas, le facteur d'échelle est fixé, de sorte que la plus petite différence qui peut être représenté entre deux nombres est également fixé - à savoir la différence entre 1024 et le prochain plus grand nombre est exactement la même que la différence entre 0 et le prochain grand nombre.
Réciproques
Je ne sais pas exactement pourquoi vous êtes concernés par calcul inverse des très grands nombres ou extrêmement petites. Le point flottant IEEE utilise des dénormaux, ce qui signifie que les nombres proches des limites de la plage perdent de la précision. Fondamentalement, un nombre est divisé en un exposant et un significand. L'exposant contient la grandeur du nombre, et le significand contient les chiffres significatifs. Chacun est représenté avec un nombre de bits spécifié. Dans le cas habituel, les nombres sont normalisés, ce qui signifie qu'ils sont vaguement semblables à la notation scientifique que nous avons tous appris à l'école.En notation scientifique, vous ajustez toujours le significand et l'exposant de façon à ce qu'il y ait exactement une place avant la virgule, donc (par exemple) 140 devient 1.4e2, 20030 devient 2.003e4, et ainsi de suite. Pensez-y comme la forme «normalisée» d'un nombre à virgule flottante. Supposons, cependant, que vous êtes limité à un exposant ayant 2 chiffres, donc il ne peut aller de -99 à +99. Supposez également que vous pouvez avoir un maximum de 15 chiffres significatifs. Dans ces limites, vous pourriez produire un nombre comme 0,00001002e-99. Cela vous permet de représenter un nombre inférieur à 1e-99, au détriment de perdre de la précision - au lieu de 15 chiffres de précision, vous avez utilisé 5 chiffres de votre significande pour représenter la magnitude, donc il vous reste seulement 10 chiffres qui sont vraiment importants.
Sauf qu'il est en binaire au lieu de décimal, le point flottant IEEE fonctionne à peu près de cette façon. A l'approche de la fin de la plage, les nombres ont de moins en moins de précision, jusqu'à ce que (à la toute fin de la plage) il ne reste qu'un peu de précision. Si vous prenez ce nombre qui a seulement un peu de précision, et prenez sa réciprocité, vous obtenez un nombre extrêmement élevé - mais puisque vous avez seulement commencé avec un peu de précision, le résultat ne peut avoir qu'un peu de précision en tant que bien. Bien qu'un peu mieux que pas de résultat du tout, il est encore assez proche de sens. Vous avez atteint la limite de ce que le nombre de bits peut représenter; à propos de la seule façon de remédier au problème est d'utiliser plus de bits.
Il n'y a pas vraiment de point à partir duquel un réciproque (ou un autre calcul) "n'a plus de sens". Ce n'est pas vraiment une ligne dure où un résultat a du sens, et un autre ne le fait pas. Plutôt, c'est une pente, où un résultat peut avoir 15 chiffres de précision, un autre 10 et un tiers seulement 1. Ce qui "a du sens" ou non est la plupart du temps comment vous interprétez ce résultat. Pour obtenir des résultats significatifs, vous devez avoir une bonne idée du nombre de chiffres dans votre résultat final.
Merci Poita_. Pour 3, voir mon dernier post http://stackoverflow.com/questions/2185296/inverse-distance-weighted-value-and-machine-precision – Tim