Chapitre 3. Manipulation de donn´ ees, fonctions
143
entre .Machine$double.xmin et .Machine$double.xmax (mˆ eme les nombres
entiers).
Prenons par exemple le nombre 2
150 , qui sera repr´ esent´ e par l’ordinateur sous
la forme :
(−1)
0 (1 + 0)2
(1173−1023)
.
Alors, le nombre imm´ ediatement sup´ erieur que l’ordinateur pourra coder sera
donn´ e pour les valeurs s = 0, e = 1173 et f = 2
−52 (plus petite valeur fractionnaire non nulle de la mantisse), soit :
(−1)
0 (1 + 2
−52 )2
150
= 2
150
+ 2
150−52
= 2
150
+ 2
98
.
Il peut donc y avoir un ´ enorme « trou » (d’une longueur de 2
98
≈ 3.2e + 29 ici)
entre deux nombres « cons´ ecutifs » !
Ceci permet donc d’expliquer l’´ etranget´ e de la sortie ci-dessous :
> a <- 2^150; b <- a + 2^97; b == a
[1] TRUE
> b-a
[1] 0
> a <- 2^150; b <- a + 2^98; b == a
[1] FALSE
> b-a
[1] 3.169127e+29
Astuce
D’autres informations sur les limites de l’ordinateur dans la repr´ esentation des nombres sont accessibles au travers de l’instruction .Machine :
> noquote(unlist(format(.Machine)))
double.eps
double.neg.eps
2.220446e-16
1.110223e-16
double.xmin
double.xmax
2.225074e-308
1.797693e+308
double.base
double.digits
2
5 3
double.rounding
double.guard
5
0
double.ulp.digits double.neg.ulp.digits
-52
-53
double.exponent
double.min.exp
11
-1022
double.max.exp
integer.max
1024
2147483647
sizeof.long
sizeof.longlong
Précédent

- 177/701

Suivant