Chapitre 7. Maintenance des sessions
323
> as.integer(2^31-1)
[1] 2147483647
> .Machine$integer.max
[1] 2147483647
Le r´ esultat ci-dessous n’est donc pas ´ etonnant.
> as.integer(2^31)
[1] NA
Le chiffre 2
31 ne pourra donc ˆ etre manipul´ e par R que cod´ e comme un
double :
> 2^31
[1] 2147483648
> is.double(2^31)
[1] TRUE
Attention
Le plus long vecteur que l’on peut allouer dans R est de taille 2
31
− 1 ∼
2 · 10
9 , que ce soit sur un processeur 32 bits ou 64 bits. Ceci se comprend
ais´ ement au vu des r´ esultats pr´ ec´ edents puisque cela correspond au plus
grand entier que R peut d´ efinir, et que la longueur d’un vecteur (nombre
de ses ´ el´ ements) est stock´ ee comme un entier (sign´ e).
Au passage, cette connaissance plus fine du comportement de R nous permet
par exemple de bien comprendre la sortie ci-dessous.
> 46360 * 46360 # 46360 est stocké comme un double.
[1] 2149249600
> 46360L * 46360L # 46360L est stocké comme un integer.
[1] NA
> sum(1:304) # 1:304 est stocké comme un integer.
[1] 46360
> sum(1:304) * sum(1:304)
[1] NA
Message d’avis :
In sum(1:304) * sum(1:304) :
NA produit par débordement d’entier par le haut
> 46360^2 # Le résultat est stocké comme un double.
[1] 2149249600
> sum(1:304)^2 # Le résultat est stocké comme un double.
[1] 2149249600
Le Message d’avis ci-dessus vient du fait que sum(1:304) est un entier. Notez
que la fonction puissance (^) transforme ses arguments en r´ eels et renvoie un
nombre r´ eel.
Précédent

- 356/701

Suivant