« Découvrir Scilab/Calcul numérique » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Le problème de la précision et de l'exactitude : effet de bors simple et commande nearfloat()
Ligne 1 741 :
Il faut donc s'assurer d'une part que le valeur finale est représentable mais aussi que les résultats des calculs intermédiaires sont eux aussi représentables. Par exemple le calcul de <code>abs(-10^-200)</code> donne bien le résultat 10<sup>-200</sup>, alors que <code>sqrt((-10^-200)^2)</code> donne 0, puisque le résultat intermédiaire (-10<sup>200</sup>)<sup>2</sup> n'est pas représentable (soupassement). Dans certains cas, un algorithme itératif, cherchant une valeur approchée, peut donner un meilleur résultat qu'un calcul direct utilisant une formule exacte… Par exemple, pour calculer l’hypoténuse d'un triangle rectangle <math>\sqrt{a^2 + b^2}</math> (norme euclidienne), on peut utiliser la méthode de Moler et Morrison (1983)<ref>{{harvsp|Baudin|2010b|p = 44–45}}</ref>, ce que fait d'ailleurs la commande Scilab <code>norm()</code>.
 
Le problème de la précision peut parfois se manifester sur des calculs « banals ». Par exemple, le vecteur <code>[-5.1:0.2:5.1]</code> devrait contenir les 51 éléments {–5,1 ; –4,9 ; … ; 4,9 ; 5,1}. Or, les cinquante additions successives de la quantité 0,2, du fait des erreurs d'arrondis, font que le dernier élément calculé est légèrement supérieur à 5,1 (il vaut environ 5,1 + 9⋅102⋅10<sup>-1615</sup>) et donc la liste s'arrête à 4,9. Ce genre de problème peut se gérer avec la commande <code>nearfloat()</code> :
<source lang="scilab">
-5.1:0.2:nearfloat("succ", 5.1)