Voici le code à compléter pour la semaine 8 concernant les algorithmes de Kahan-Dekker et de Pichat :
Haskell
import qualified Data.List as L -- pour avoir reverse et sort -- twoSum : somme compensée de 2 flottants sans branchement twoSum x y = let s = x + y in let [xv,yv] = [s - y , s - x ] in let [ex,ey] = [x - xv, y - yv] in (s , ex + ey) -- somme basique (+) des éléments d'une liste classée dans l'ordre croissant sommeC liste = -- somme basique (+) des éléments d'une liste classée dans l'ordre décroissant sommeD liste = -- somme compensée (Kahan) : on rajoute les raisins perdus après chaque cep secoué sommeK liste = let (sn,en) = foldl (\ (sk, ek) xk' -> twoSum sk (xk' + ek)) (0,0) liste in sn -- somme en cascade (Pichat) : on collecte les raisins perdus à part et on les rajoute à la fin sommeP liste =