Arrondi et truncature

publicité
Arrondi et truncature
Fabrice Dessaint
Inra, UMR1347 Agroécologie, Dijon
Décembre 2015
Cette note présente quelques unes des fonctions de R permettant d’arrondir ou
de tronquer un nombre décimal.
Les nombres
On appelle nombre, une séquence ordonnée d’un ou de plusieurs symboles
servant à exprimer les différentes valeurs possibles d’une quantité ou d’une
grandeur physique. Selon le système de numération, le nombre de symboles
utilisés pour écrire un nombre va varier.
Dans le système de numération décimal (ou système en base 10), les symboles
utilisés, sont les chiffres de 1 à 9 et le chiffre 0. Dans le système héxadécimal
(ou système en base 16), on ajoute aux chiffres précédents, les symboles A,
B, C, D, E et F alors que dans le système binaire (ou système en base 2), on
n’utilisera que les chiffres 0 et 1.
Plus généralement, pour un système en base b, on utilisera donc les chiffres et les lettres de 0 jusqu’à la base b du
système de numération, celle-ci étant exclue.
La valeur représentée par un nombre est la somme du produit des différents symboles qui le compose par la valeur de leur position dans le nombre.
En effet, chaque position dans le nombre a une valeur, tout comme chaque
symbole.
Ainsi, le nombre 103 écrit en base 4, représente en base 10, la valeur 19 :
strtoi("103", 4L)
[1] 19
1*4^2 + 0*4^1 + 3*4^0
[1] 19
Ce même nombre, écrit en base 8, correspond (en base 10) à 67
strtoi("103", 8L)
[1] 67
1*8^2 + 0*8^1 + 3*8^0
[1] 67
alors que écrit en base 16, il correspond à 259
Dans le nombre 103, le chiffre 3 occupe
la première position qui, quelle que
soit la base b, a pour valeur b0 = 1. Le
chiffre 0 qui est en deuxième place, a
pour valeur b1 et le chiffre 1 qui occupe
la troisième position, a pour valeur b2 .
arrondi et truncature
strtoi("103", 16L)
[1] 259
1*16^2 + 0*16^1 + 3*16^0
[1] 259
Dans le reste du document, on est en base 10 et on travaille avec des
nombres décimaux.
Les chiffres significatifs
On appelle chiffres significatifs, le nombre minimum de chiffres nécessaires
à l’écriture d’un nombre sans perte d’information. Pour définir ce nombre, il
existe quelques règles.
• tous les chiffres non nuls (1, 2, 3, 4, 5, 6, 7, 8 et 9) sont toujours significatifs
12 345 est un nombre composé de 5
chiffres significatifs ainsi que 1,2345
• tous les 0 (zéro) positionnés entre deux chiffres différents de zéro sont
toujours significatifs
10 005 est un nombre avec 5 chiffres
significatifs
• tous les zéros positionnés à droite du symbole décimale et en fin de nombre
sont significatifs
1,0200 est un nombre avec 5 chiffres
significatifs, de même que 1,0200
• tous les autres zéros sont des chiffres non significatifs : 1 000 000 est un
nombre qui n’a qu’un chiffre significatif (les zéros ne sont là que pour
indiquer la position dans le nombre du chiffre 1 : ici il est en 7e position).
Le nombre 1 000 000,00 a lui 3 chiffres significatifs : le 1 et les 2 zéros, après
le symbole décimal ; 0,0200 est aussi un nombre avec 3 chiffres significatifs :
le 2 et les 2 zéros à la fin du nombre.
Sous R, c’est la fonction signif() qui permet de faire cette opération. Cette
fonction possède 2 arguments :
signif(x, digits = 6)
Le premier, x=, est obligatoire et indique la valeur que l’on souhaite arrondir. Le second, digits=, est facultatif. Il indique le nombre de chiffres
significatifs à conserver.
nombre <- c(12345, 1.2345, 10005, 1.0200, 1000.00, 0.0010332)
signif(x=nombre, digits=4)
[1] 1.234e+04 1.234e+00 1.000e+04 1.020e+00 1.000e+03 1.033e-03
Selon la façon dont le nombre est écrit, le nombre de chiffres significatifs
affichés peut varier. Il est alors préférable d’écrire en notation scientifique ou
en notation ingénieur, car avec ces notations, par convention, tous les chiffres
de la mantisse sont significatifs.
On peut aussi fournir un vecteur ou un
tableau numérique
Par défaut, digits=6
2
arrondi et truncature
Les arrondis
L’arrondi d’un nombre décimal est une valeur approchée de ce nombre
obtenue en réduisant le nombre de chiffres le représentant. Il existe plusieurs
façons d’arrondir un nombre.
Arrondi au pair le plus proche
C’est la méthode utilisée par la fonction round() de R. Cette fonction possède 2 arguments :
round(x, digits = 0)
Le premier, x=, est obligatoire et indique la valeur que l’on veut arrondir.
Le second, digits=, est facultatif. Il indique la position du chiffre à conserver
compté à partir du signe décimal. Une valeur positive indique que la position est située dans la partie décimale (droite) alors qu’une valeur négative
indique que la position est dans la partie entière (gauche).
Pour arrondir, un nombre décimal, on va
• Localiser le chiffre à conserver.
• Augmenter ce chiffre d’une unité si le chiffre suivant est strictement supérieur à 5
• Conserver ce chiffre si le chiffre suivant est strictement inférieur à 5
Par exemple, le nombre 3,043 arrondi à 2 chiffres après la virgule vaut 3,04
(le chiffre suivant le 4 (3) est inférieur à 5 ; on conserve donc le chiffre 4).
nombre <- c(3.043, 3.046)
round(nombre, digits=2)
[1] 3.04 3.05
Pour le nombre 3,046, l’arrondi vaut 3,05 (le chiffre suivant le 4 (6), est
supérieur à 5 ; on augmente d’une unité).
Lorsque le chiffre suivant le chiffre à conserver est le chiffre 5, on procède de
la façon suivante :
• on augmente ce chiffre d’une unité lorsque le 5 est suivi par des chiffres
différents de zéro
• lorsque le 5 est suivi de 0 alors on augmente ce chiffre d’une unité si il est
impair et on le laisse inchangé dans l’autre cas.
Par exemple, 3,0450 arrondi au centièmes vaut 3,04 (le chiffre précédent le
5 est pair) alors que l’arrondi de 3,0750 vaut 3,08 (le chiffre précédent le 5 est
impair).
nombre <- c(3.0151, 3.0450, 3.0750)
round(nombre, digits=2)
[1] 3.02 3.04 3.08
On peut aussi fournir un vecteur ou un
tableau numérique
Par défaut, digits=0 et le nombre est
arrondi à l’entier
3
arrondi et truncature
Lorsque l’on a un vecteur de nombres, on peut indiquer différents niveaux
d’arrondi.
round(c(1.234567, 2.465303, 4.876453, 6.87654, 10.02342), digits=c(2,3))
[1]
1.230
2.465
4.880
6.877 10.020
On peut aussi arrondir la partie entière. Pour cela, on va fournir une valeur
négative à l’argument digits=. Par exemple, pour arrondir à la centaine, on
utilisera digits=-2.
nombre <- c(1234.34, 256.2, 651)
round(nombre, digits=-2)
[1] 1200
300
700
Arrondi au plus grand entier inférieur
C’est la fonction ceiling() qui réalise cette opération. Elle fonction possède un seul argument :
ceiling(x)
La fonction arrondit à l’entier immédiatement supérieur au nombre à arrondir. Pour un nombre positif, cela correspond à la partie entière du nombre
augmentée d’une unité. Si le nombre est négatif, c’est la partie entière.
Par exemple, l’utilisation de cette fonction sur le nombre 12,45 retourne le
nombre 13, alors que pour le nombre -12,45, on aura -12.
nombre <- c(12.45, -12.45, 23.67, -23.67, 0.999, -0.999)
ceiling(nombre)
[1]
13 -12
24 -23
1
0
Arrondi au plus petit entier supérieur
Il est obtenu avec la fonction floor(). Cette fonction possède aussi un seul
argument :
floor(x)
Cette fonction ne demande que le nombre à arrondir. L’arrondi est fait à
l’entier immédiatement inférieur au nombre à arrondir. Pour un nombre positif, cela correspond à la partie entière du nombre ; pour un nombre négatif,
c’est la partie entière augmentée d’une unité.
Par exemple, l’utilisation de cette fonction sur le nombre 12,45 retourne le
nombre 12, alors que pour le nombre -12,45, on aura -13.
nombre <- c(12.45, -12.45, 23.67, -23.67, 0.999, -0.999)
floor(nombre)
[1]
12 -13
23 -24
0
-1
4
arrondi et truncature
Troncature
C’est la fonction trunc(). Comme les 2 précédentes, cette fonction n’a
qu’un seul argument :
trunc(x, ...)
Elle retourne la partie entière d’un nombre décimal.
trunc(nombre)
[1]
12 -12
23 -23
0
0
Son comportement est celui de la fonction floor() pour les nombres positifs et celui de la fonction ceiling() pour les nombres négatifs.
identical(trunc(-12.4), ceiling(-12.4) )
[1] TRUE
identical(trunc(12.4), floor(12.4) )
[1] TRUE
5
Téléchargement