Вы находитесь на странице: 1из 5

Calcul des fonctions usuelles par la calculatrice La calculatrice va nous donner des valeurs numériques approchées des nombres

numériques approchées des nombres que


nous souhaitons calculer. Il est donc intéressant de préciser le vocabulaire relatif à
la notion de valeur approchée. On dit qu’un réel x est une valeur approchée d’un
Longtemps les calculs numériques furent une affaire de spécialistes : les abacistes.
Ceux-ci calculaient en chiffres romains sur des tables dédiées à cet effet à l’aide de réel a avec une erreur absolue inférieure ε ≥ 0 lorsqu’on a a − x ≤ ε . Cette
petits cailloux (on dit en latin calculi). Afin de garder leur pouvoir, ils retardèrent notion de valeur approchée n’est pas satisfaisante lorsqu’on cherche à connaître les
l’introduction en occident des chiffres arabes et de la numération décimale de 13 premières décimales d’un nombre. En effet il importe peu de connaître a à la
position. Cette numération se prêtent bien mieux aux calculs numériques cela précision 10−13 , si le nombre a est de l’ordre de plusieurs milliards. En revanche,
permit à Pascal, alors âgé de 19 ans, de mettre au point en 1642 la première il n’est pas suffisant de connaître a à la précision 10−13 , si le nombre a est lui-
machine capable d’additionner et de soustraire : la Pascaline. Depuis les techniques
même de l’ordre de 10−13 . Pour ces raisons, nous introduisons la notion d’erreur
n’ont fait que progresser et les premières machines à calculer électroniques sont
relative : on dit que qu’un réel x est une valeur approchée d’un réel non nul a
apparues au début des années 1970. Elles rendirent obsolètes les règles à calculs et
autres tables de logarithme qui étaient jusqu’alors utilisées pour évaluer les a −x
avec une erreur relative inférieure à ε lorsqu’on a ≤ ε . Si l’on connaît a
fonctions trigonométriques, exponentielles et logarithmiques. L’objet de cet article a
est de présenter les démarches algorithmiques qui permettent à nos calculatrices avec une erreur relative de l’ordre de 10−14 alors on peut affirmer que les 13
modernes de déterminer les valeurs prises pas les fonctions usuelles. premières décimales de a sont correctes. Soulignons au passage que cette notion
Représentation des nombres d’erreur relative est globalement compatible avec la multiplication et le passage à
Dans les calculatrices scientifiques modernes, les nombres à virgules sont l’inverse mais ne l’est pas avec l’addition et la soustraction.
représentés à l’aide d’une mantisse formée de 13 chiffres en base 10, chacun étant Il ne nous reste maintenant plus qu’à voir les algorithmes permettant d’évaluer les
codé sur 4 bits. Cette mantisse est suivie d’un exposant correspondant à la différentes fonctions usuelles.
puissance de dix multiplicatrice de la mantisse. La calculatrice va donc travailler La fonction racine carrée
avec 13 chiffres significatifs, mais à cause des petites erreurs qui s’accumulent lors
des calculs, on peut considérer que les dernières décimales sont peu sûres et c’est Commençons par étudier le fonctionnement de la touche . . Nous souhaitons
pourquoi la calculatrice n’affichera que les 10 premières. A contrario, le logiciel de évaluer la racine carrée d’un réel a strictement positif. Celle-ci étant solution de
calcul formel Maple affiche toutes les décimales de ses calculs, il faut donc savoir l’équation x 2 − a = 0 , l’application de la méthode des tangentes de Newton nous
que les dernières sont parfois fausses. invite à considérer une suite (x n ) vérifiant la relation de récurrence
Avec cette représentation électronique en base 10 des nombres manipulés, les
1 a
opérations d’addition et de soustraction sont assez faciles à implémenter au niveau x n +1 = x n +  .
des circuits électroniques, elles seront donc rapidement exécutées par le processeur 2  xn 
de la calculatrice. Les multiplications sont en revanche coûteuses en temps de
On montre sans peine, qu’en partant d’un x 0 > 0 , la suite obtenue converge vers
calculs et les divisions le sont encore plus. Nous chercherons donc à en réduire le
nombre. C’est pour cette raison que les évaluations des fonctions numériques à a . Il suffit alors à la machine de calculer les termes successifs de cette suite
partir de développement en série entière ne conduisent pas à des algorithmes jusqu’à obtention de deux termes consécutifs égaux, termes qui constitueront alors
efficaces : il y aurait trop de multiplications complexes. Cependant, soulignons que une approximation satisfaisante de a . Notons que la convergence de la suite (x n )
les multiplications et divisions par 10 sont rapides à réaliser car elles n’opèrent
est quadratique car on peut montrer :
qu’au niveau de l’exposant. Notons aussi que les multiplications et divisions par 2,
ou plus généralement par un petit entier, sont elles aussi assez rapides. 1 2
x n +1 − a ∼ (x n − a )
2 a
Ainsi, plus x n est proche de a , plus x n +1 s’en rapproche ; la convergence est Pour décomposer a , nous commençons par poser a 0 = a , puis nous cherchons
donc rapide. parmi les valeurs de la liste précédente, la plus grande qui soit inférieure à a 0 .
Cette méthode est connue depuis l’antiquité, on l’appelle méthode de Héron ou Notons la x1 et reprenons le processus précédent à partir du complément
algorithme de Babylone. Elle est simple mais a pour inconvénient de nécessiter une a1 = a 0 − x1 . On continue ainsi de suite, jusqu’à ce que ce processus s’arrête, c'est-
division complexe à chaque étape. Afin de réduire le nombre de divisions, nous
allons procéder de manière plus détournée. à-dire jusqu’à l’obtention d’un réel positif ε = an inférieur à ln (1 + 10−7 ) (quantité
elle-même inférieure à 10−7 ). Nous avons alors la relation
Au lieu de calculer a , cette fois-ci nous allons évaluer 1 a puis conclure par un
a = x1 +  + x n + ε
passage à l’inverse. Le nombre 1 a est
Ci-dessous est représentée la d’où nous tirons
1 progression du nombre de
solution de l’équation 2 −a = 0 . Par la
x décimales correctes lors du calcul ea = ex1 exn eε .
méthode des tangentes de Newton, nous Les quantités exk sont connues car de la forme 1 + 10−i et la quantité eε s’évalue
de 3 , par la formule d’itération
sommes amener à considérer une suite
3x −ax n3 par l’égalité eε  1 + ε ce qui fournit au final :
(x n ) définie par : x n +1 = n .
2 ea  ex1 exn (1 + ε)
3
3x n −ax n L’accélération finale dans
x n +1 = avec une erreur relative de l’ordre de 10−14 .
2 l’obtention de ces décimales
illustre le caractère quadratique de C’est cette idée qui est à l’origine de l’algorithme présenté en annexe. Notons que
la convergence. cette algorithme peut gagner en efficacité en commençant par rechercher plus
On montre que, pour x 0 ∈  0,1 a  , la n Approximation directement le plus grand multiple de ln 2 inférieur à a .
 
suite croît vers 1 a et cette convergence 0 3,0000000000 La fonction logarithme népérien
est, elle aussi, quadratique. Cette fois-ci, il 1 2,250000000000 L’idée sous-jacente au calcul de exp(a ) revenait en fait à écrire :
y a 3 multiplications complexes à chaque 2 1.869230769230 a = n 0 ln 2 + n1 ln (1 + 10−1 ) +  + n 7 ln (1 + 10−7 ) + ε
étape et un passage à l’inverse à la fin de
3 1.745809828502
l’algorithme, c’est plus efficace. avec nk ∈  et ε ∈ [ 0,10−7 ] afin de pouvoir conclure :
La fonction exponentielle 4 1.732211772409
n1 n7
5 1.732050830003 ea  2n0 (1 + 10−1 ) (1 + 10−7 ) (1 + ε)
Nous allons chercher ici à évaluer exp(a )
pour a ∈  mais nous nous limiterons au 6 1.732050807569 avec une erreur relative de l’ordre de 10−14 .
cas où a est positif. En effet si le réel a De manière inverse, pour calculer ln a avec a > 1 , on peut chercher à écrire
est négatif, il suffit pour conclure de considérer −a puis de réaliser un passage à n1 n7
l’inverse au terme des calculs. a = 2n0 (1 + 10−1 ) (1 + 10−7 ) (1 + ε)
Pour calculer exp(a ) avec a ≥ 0 , nous allons décomposer a en une somme de avec nk ∈  et ε ∈ [ 0,10−7 ] et exploiter la relation ln(1 + ε)  ε afin de pourvoir
réels dont on connaît les exponentiels. Pour cela nous exploitons une liste de conclure :
valeurs précalculées figurant dans les mémoires internes de la calculatrice. Ces
valeurs sont celles des réels ln(1 + 10−k ) pour k ∈ {0,1,…,7} ln a  n 0 ln 2 + n1 ln (1 + 10−1 ) +  + n 7 ln (1 + 10−7 ) + ε
avec une erreur absolue inférieure à 10−14 . Si nous souhaitons plutôt disposer d’une Au terme de cette construction, on dispose de x n = cos α , yn = sin α et
erreur relative de l’ordre de 10−14 , il faudra exploiter l’approximation plus fine yn x n = tan α .
1 Cette démarche pourrait sembler satisfaisante mais elle induit trop de
ln(1 + ε)  ε − ε 2 .
2 multiplications complexes. De plus, pour être efficace, elle nécessiterait la mise en
La décomposition de a en un produit se fait aisément en commençant par diviser mémoire des valeurs des cosinus et sinus des αp c'est-à-dire des angles
a par 2 tant que le résultat est supérieur à 1, puis en divisant par 1 + 10−1 etc. arctan10−k .
L’algorithme correspondant à cette démarche est présenté en annexe.
Optimisons
Les fonctions trigonométriques
Pour gagner en efficacité nous allons réorienter le problème et non plus calculer
Pour évaluer les fonctions cos, sin et tan sur un angle θ la démarche que nous
directement le cosinus et sinus de θ ∈ [0, π 4] mais plutôt en calculer la tangente.
allons suivre présente plusieurs similarités avec celle vue lors de l’étude de la
fonction exponentielle. Cette démarche a été développée par J.E Volder en 1959 et Notons que cosθ et sin θ se déduisent de tan θ par les relations
est appelée algorithme CORDIC (pour Cordiante Rotation Digital Computer). 1 tan θ
cos θ = et sin θ =
Pour calculer cos θ ,sin θ et tan θ , nous commençons par exploiter les formules de 2
1 + tan θ 1 + tan 2 θ
trigonométrie usuelles de sorte de ramener le problème au cas où θ ∈ [0, π 4] .
Commençons par réécrire le système définissant les suites (x p ) et (y p ) :
Ensuite nous décomposons θ en une somme d’angles dont les cosinus, sinus et
tangentes sont connus. Pour cela nous allons encore une fois exploiter une liste de 

x p = cos αp (x p−1 − y p−1 tan αp )
y = cos α (x tan α + y ) .
valeurs précalculées figurant en mémoire, les valeurs des angles arctan(10−k ) pour 

 p p p−1 p p−1

k ∈ {0,…, 4} . Les cosinus, sinus et tangentes de ces angles sont aisément Comme cette fois-ci ce n’est que le rapport y p x p qui nous intéresse, il est possible
calculables. de considérer les suites (X p )0≤p≤n et (Yp )0≤p≤n définies par :
Pour décomposer θ , nous posons θ0 = θ puis nous cherchons, parmi les angles

x 0 = 1 X = X p−1 −Yp−1 tan αp

précalculées, le plus grand qui soit inférieur à θ0 , notons le α1 . On considère alors  et  p .

y
 0 = 0  Yp = X p−1 tan αp +Yp−1


le complément θ1 = θ0 − α1 et on reprend ce processus à partir de θ1 et ce jusqu’à
obtention d’un θn inférieur à arctan(10−4 ) . Ainsi nous parvenons à la relation On observe aisément qu’on a pour tout p ∈ {0,…, n }
θ = α + ε avec α = α1 +  + αn et ε = θn réel positif inférieur à arctan(10−4 ) Yp yp
−4
=
donc inférieur à 10 . Xp xp
Parallèlement à la décomposition de θ , nous calculons cosα et sin α en Notons que cette fois-ci, les calculs définissant les suites (X p ) et (Yp ) sont
construisant deux suites (x p )0≤p≤n et (y p )0≤p≤n telles que x p = cos(α1 +  + αp ) et beaucoup plus rapides. Certes il existe toujours deux multiplications, mais celles-ci
y p = sin(α1 +  + αp ) . En exploitant les formules de développement de cos(a + b ) sont des multiplications par tan αp qui n’est rien d’autre qu’une puissance négative
et sin(a + b ) , on vérifie que ces suites sont définies par de 10, ces multiplications sont donc rapides.
x 0 = 1 
x = x p−1 cos αp − y p−1 sin αp

 et  p .
y
 0
 = 0 y p = x p−1 sin αp + y p−1 cos αp


Au terme de ce calcul, on obtient Yn X n = tan(α ) et il ne reste plus qu’à en
déduire la tangente de θ = α + ε . Pour cela nous exploitons la formule de
1
développement de tan(a + b ) et l’approximation tan ε  ε + ε3 afin d’obtenir
3
3Yn + (3ε + ε3 )X n
tan θ 
3X n − (3ε + ε3 )Yn
avec une erreur relative de l’ordre de 10−14 . L’algorithme correspondant à cette
démarche est présenté en annexe.
Et pour aller encore plus vite…
Pour rendre cet algorithme encore plus efficace, il convient de travailler avec des
angles de la forme arctan(2−k ) avec k ∈  . A l’aide de l’inégalité :
arctan(2a ) ≤ 2arctan a
valable pour a ≥ 0 , on peut justifier qu’il est possible de décomposer n’importe
quel θ ∈ [0, π 4] sous la forme
+∞
θ = ∑ εk arctan(2−k )
k =1

avec εk = 1 ou −1 . La suite (εk ) se construit par récurrence en posant εp de signe


p−1
opposé à la différence θ − ∑ εk arctan(2−k ) . Les suites (X p ) et (Yp ) sont alors
k =1
définies de la manière suivante :
X 0 = K
 
X = X p−1 − εp 2−pYp−1
 et  p −p
 Y0 = 0

 
 Yp = εp 2 X p−1 +Yp−1

+∞
avec K constante précalculée égale à ∏ cos(arctan(2
k =1
−k
)) , constante voisine

de 0,85879 . Avec cette démarche, nous constatons que les suites (X p ) et (Yp )
convergent respectivement vers cos θ et sin θ , et nous disposons d’une méthode
permettant de calculer efficacement les fonctions trigonométriques sur des nombres
représentés en binaire.
Annexe : Algorithmes d’évaluation des fonctions Tant que ( k ≤ 7 ) faire
usuelles { Tant que (10−7 ≤ x ) faire { x = (x −10−k ) (1 + 10−k ) , y = y + Lk }
k = k +1 }
Racine carrée 1
Argument a > 0 . y = y +x − x 2 .
2
x = 0 , y = min(1,1 a ) Si ( a ≥ 1 ) alors {Répondre y }Sinon {Répondre −y }
Tant que ( x < y ) faire { x = y , y = (3x −ax 3 ) 2 } Fin
Répondre 1 y .
Tangente
La suite des x ainsi construits étant croissante, le test d’arrêt x < y est satisfaisant.
On préférera celui-ci au teste x ≠ y car, à cause de l’imprécision numérique, des Ak correspond à la valeur de arctan(10−k ) figurant en mémoire

phénomènes cycliques peuvent apparaître pour x voisin de 1 a . Argument a ∈ [0, π 4] .


Exponentielle Début
−k
Lk correspond à la valeur de ln(1 + 10 ) figurant en mémoire t =a , x =1 , y = 0 , k =1 .
Tant que ( k ≤ 3 ) faire
Argument a ∈  .

x = x −10−k y
Début { Tant que ( Lk ≤ t ) faire { t = t − Lk ,  −k
}

y = 10 x + y

x = a , y =1 , k = 0 .
Tant que ( k ≤ 7 ) faire k = k +1 }
{ Tant que ( Lk ≤ x ) faire { x = x − Lk , y = y + y10−k } 3y + (3t + t 3 )x
Répondre
k = k +1 } 3x − (3t + t 3 )y
y = y (1 + x ) Fin.
Si ( a ≥ 0 ) alors {Répondre y } Sinon {Répondre 1 y }
Fin

Logarithme népérien
Lk correspond à la valeur de ln(1 + 10−k ) figurant en mémoire
Argument a > 0 .
Début
Si ( a ≥ 1 ) alors { x = a −1 } Sinon { x = 1 a −1 }
y =0, k =0.

Вам также может понравиться