2016-02-11 2 views
0

Quelle est la précision de la notation scientifique dans R? Je génère des données qui comme les valeurs comme ceci:Précision de la notation scientifique dans R

-5.59924596431885e-320 

Est-ce une valeur précise? Je sais que R est d'habitude seulement une précision de 15 décimales lorsque le nombre est écrit comme ceci:

-2.1411372887 

Ainsi est la notation scientifique précise à un si petit nombre?

+0

Précis par rapport à quoi? Les ordinateurs n'ont pas un niveau de précision infini. Il est important de comprendre les limites de l'arithmétique en virgule flottante (http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal). Mais il est difficile de parler de précision quand on ne sait pas quelle est la «vraie» valeur que vous essayez de calculer. – MrFlick

+1

Des questions qui ont été posées auparavant comme [Traitant de très petits nombres dans R] (http://stackoverflow.com/questions/5802592/dealing-with-very-small-numbers-in-r) et [Manipulation de nombres extrêmement petits ] (http://stackoverflow.com/questions/26513029/handling-extremely-small-numbers) ont des recommandations comme 'Rmpfr',' gmp', et 'Brobdingnag'. S'il vous plaît montrer l'effort en recherchant ces options. –

+0

Si ce sont des estimations de paramètres alors elles sont effectivement nulles et ce serait le cas si la puissance de 10 était même aussi basse que -16. La notion de "précision à 15 places" provient des problèmes de propagation d'erreur dans la multiplication des nombres à virgule flottante. Il est également en dehors de la plage de valeurs possibles pour la 'double'-classe dans R qui est listée sur sa page d'aide comme 2e-308 à 2e + 308. Donc je pense que "pas précis" est la réponse probable. –

Répondre

3

Ce n'est pas vraiment une question sur R, mais une question sur la représentation en virgule flottante. Les doubles normaux sont précis à 15 ou 16 chiffres décimaux. Cependant, le plus petit double normal est 2^-1022 ou 2.225074e-308. Les valeurs plus petites peuvent alors être représentées par des doubles, mais vous commencez à perdre de la précision, car le significand sera rempli avec des zéros. Ainsi, par exemple, 1e-320 ne sera précis qu'à environ 3 ou 4 chiffres décimaux, puisqu'il est environ 10^12 fois plus petit que min_double.

Voir: https://en.wikipedia.org/wiki/Denormal_number

Les valeurs max et min epsilon double et sont stockés dans la machine en tant que R .Machine. Sur mon ordinateur:

> .Machine 
$double.eps 
[1] 2.220446e-16 

$double.neg.eps 
[1] 1.110223e-16 

$double.xmin 
[1] 2.225074e-308 

$double.xmax 
[1] 1.797693e+308 

$double.base 
[1] 2 

$double.digits 
[1] 53 

$double.rounding 
[1] 5 

$double.guard 
[1] 0 

$double.ulp.digits 
[1] -52 

$double.neg.ulp.digits 
[1] -53 

$double.exponent 
[1] 11 

$double.min.exp 
[1] -1022 

$double.max.exp 
[1] 1024 

$integer.max 
[1] 2147483647 

$sizeof.long 
[1] 8 

$sizeof.longlong 
[1] 8 

$sizeof.longdouble 
[1] 16 

$sizeof.pointer 
[1] 8 
+0

Voir la question que j'ai est quand vous dites" Les doubles normaux sont précis à 15 ou 16 chiffres décimaux ", quand un nombre est écrit en notation scientifique, est-ce que cette règle s'applique à la nombre entier ou seulement au significand? – Plinth

2

Si vous utilisez IEEE-754 double en R (et je suis 99,99% que vous êtes), il y a deux valeurs minimales:

  1. Normalisée minimum, qui, comme @mrip dit, est sur le point 2.22507e-308

  2. minimum dénormalisées, qui est d'environ 4.94066e-324

Morale de l'histoire: vous obtenez des deniers dans votre calcul, et non, ils ne peuvent pas être précis à 15 décimales