Le programme est le suivant
Code : Tout sélectionner
Somme(l):={
local x,s,c;
s:=0.0;
c:=0.0;
for x in l do
c += (x-((s+x)-s));
s += x;
fpour;
return s+c;
}:;
d’arrondis, on a le premier calcul intervenant dans c, s+x qui donnera
une erreur de signe opposé à celui du calcul de s à la ligne suivante,
le 2ième calcul effectué (s+x)−s donne une erreur absolue en ε|x| au
pire (car c’est une erreur relative par rapport à (s+x)−s), et la
3ième erreur d’arrondi est négligeable (puisque la somme devrait
valoir 0). On a donc une erreur absolue sur s+c qui est au premier
ordre au pire en O(ε∑|x_i|), bien meilleure que la majoration
ε((n−1)|x_1|+(n−2)|x_2|+...+|x_n||) si on fait le calcul naivement.