Arrondi et truncature
Fabrice Dessaint
Inra, UMR1347 Agroécologie, Dijon
Décembre 2015
Cette note présente quelques unes des fonctions de Rpermettant 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 bdu
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.
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 b1et le chiffre 1 qui occupe
la troisième position, a pour valeur b2.
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
arrondi et truncature 2
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 10 005 est un nombre avec 5 chiffres
significatifs
toujours significatifs
tous les zéros positionnés à droite du symbole décimale et en fin de nombre 1,0200 est un nombre avec 5 chiffres
significatifs, de même que 1,0200
sont significatifs
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 7eposition).
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 ar- On peut aussi fournir un vecteur ou un
tableau numérique
rondir. Le second, digits=, est facultatif. Il indique le nombre de chiffres
Par défaut, digits=6
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.
arrondi et truncature 3
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 pos-
sède 2arguments :
round(x, digits = 0)
Le premier, x=, est obligatoire et indique la valeur que l’on veut arrondir. On peut aussi fournir un vecteur ou un
tableau numérique
Le second, digits=, est facultatif. Il indique la position du chiffre à conserver Par défaut, digits=0 et le nombre est
arrondi à l’entier
compté à partir du signe décimal. Une valeur positive indique que la posi-
tion 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 à 2chiffres 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
arrondi et truncature 4
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 pos-
sède un seul argument :
ceiling(x)
La fonction arrondit à l’entier immédiatement supérieur au nombre à ar-
rondir. 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 po-
sitif, 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
arrondi et truncature 5
Troncature
C’est la fonction trunc(). Comme les 2pré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 posi-
tifs 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
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !