• Aucun résultat trouvé

Arithmétiques doubles-doubles et quad-double

Telle que dénie par Priest [81, 82], une expansion de longueur n est la représentation d'un réel x sous la forme d'un n-uplet (x1, . . . , xn) ∈ Fn tel que

1. x est égal à la somme exacte, non évaluée, des xi;

2. les xi non nuls sont triés par ordre décroissant de valeur absolue ;

3. les xi non nuls ne se chevauchent pas : xi et xi+1 ne présentent aucun bit signicatif de même poids.

3.4. Arithmétiques doubles-doubles et quad-double 39 Les xisont communément appelées les composantes de l'expansion x. Priest propose égale-ment des algorithmes pour eectuer exacteégale-ment les opérations arithmétiques éléégale-mentaires sur les expansions  addition et produit de deux expansions, division d'une expansion par une autre. Ces algorithmes permettent donc d'eectuer des calculs en précision arbitraire à l'aide de l'arithmétique ottante disponible sur les machines, de précision nécessairement nie. Cet auteur décrit également une procédure de renormalisation, permettant d'assurer que la propriété de non chevauchement est bien vériée par l'expansion produite par une opération arithmétique élémentaire.

Notons que les algorithmes formulés par Priest sont valables dans le cadre d'une arith-métique ottante avec arrondi dèle. Shewchuk [87, 88] adaptera ensuite les travaux de Priest dans la cadre de la norme IEEE-754, en supposant en particulier que les opérations de d'arithmétiques ottantes sont toutes eectuées en arrondi au plus proche.

Les expansions de longueur xe constituent un cas particulier de travaux relatés ci-dessus : dans ce cas, on xe à l'avance le nombre de composantes utilisées par expansion, ce qui permet de simuler une précision de travail xée. Citons ici les auteurs de [35] :

We note that many applications would get full benet from using merely a small multiple of (such as twice or quadruple) the working precision, without the need for arbitrary precision. The algorithms for this kind of xed preci-sion can be made signicantly faster than those for arbitrary precipreci-sion. Bailey [4] and Briggs [14] have developed algorithms and software for double-double precision, twice the double precision1. They used the multiple-component for-mat, where a double-double number is represented as an unevaluated sum of a leading double and a trailing double.

Il est également à noter que de nombreux travaux antérieurs à ceux évoqués ci-dessus visent à simuler une précision de travail doublée à l'aide d'un format de représentation des nombres proche de celui des expansions de longueur deux. C'est la cas par exemple des travaux de Møller [65, 64], Dekker [19], Knuth [47] et Linnainmaa [58].

Dans tous les cas cités ci-dessus, les briques de bases permettant les opérations élémen-taires sur les expansions sont ce que nous appelons dans ce document des transformations arithmétiques exactes, comme celles décrites dans la section précédente.

Dans la suite de cette section, nous fournissons quelques détails sur l'arithmétique  double-double  [4, 34, 57] : nous décrivons notamment les algorithmes qui nous seront utiles pour comparer les performances de l'arithmétique double-double à celles des algo-rithmes compensés que nous présenterons par la suite  nous eectuerons notamment de telles comparaisons au chapitre 5. Nous dirons également quelques mots à propos de l'arithmétique quad-double [35].

3.4.1 Arithmétique double-double

Les opérations arithmétiques sur les doubles-doubles permettent de doubler la double précision IEEE-754, orant ainsi précision de travail de l'ordre de 106 bits. Ce doublement de la précision est obtenu uniquement à l'aide d'opérations arithmétiques élémentaires, dans le mode d'arrondi au plus proche. Le format double-double tel que nous le présentons ici est celui décrit dans [57] et utilisé dans [34]. Un double-double a est une paire (ah, al), formée de deux ottants double précision IEEE-754, telle que :

40 Chapitre 3. Transformations arithmétiques exactes 1. a = ah + al, et

2. ah ⊕ al = ah.

Le fait que l'on impose ah ⊕ al = ah assure que les ottants ah et al sont triés par ordre de valeurs absolues décroissantes. Puisque l'on travaille en arrondi au plus proche, en double précision IEEE-754, la condition ah⊕al = ah implique |al| ≤ 1/2 ulp(ah). De plus, lorsque |al| = 1/2 ulp(ah), la règle de l'arrondi pair implique que le bit de poids faible de ah est nul. La condition ah⊕al = ah assure donc aussi que les ottants ah et al ne se chevauchent pas. Comme nous l'avons déjà dit, cela implique une étape de renormalisation à la n de chaque opération arithmétique entre double-doubles.

Dans nos comparaisons entre l'arithmétique double-double et les algorithmes compen-sés, nous n'aurons besoin que de deux opérations :

1. l'addition d'un double-double et d'un double, 2. le produit d'un double-double par un double.

Nous formulons ci-dessous les algorithmes permettant d'eectuer ces opérations. Comme dans [57], nous supposons que les opérations ottantes sont eectuées en double précision IEEE-754, dans le mode d'arrondi au plus proche.

L'algorithme add_dd_d ci-dessous calcule l'addition d'un double-double et d'un double, en 10 opérations ottantes.

Algorithme 3.25. Addition (rh, rl) = (ah, al) ⊕ b function [rh, rl] = add_dd_d(ah, al, b)

[th, δ] = TwoSum(ah, b) tl = al ⊕ δ

[rh, rl] = FastTwoSum(th, tl)

L'algorithme prod_dd_d eectue le produit d'un double-double par un double, en 22 opérations ottantes.

Algorithme 3.26. Produit (rh, rl) = (ah, al) ⊗ b. function [rh, rl] = prod_dd_d(ah, al, b)

[th, δ] = TwoProd(ah, b) tl = al ⊗ b ⊕ δ

[rh, rl] = FastTwoSum(th, tl)

Si un FMA est disponible, on utilise cette instruction pour le calcul de tl, et on remplace bien sûr TwoProd par TwoProdFMA : le décompte des opérations ottantes se trouve alors ramené à 7.

Dans chacun des algorithmes formulés ci-dessus, le fait que la paire (rh, rl) produite en sortie soit toujours une expansion de longueur deux, c'est à dire que |rl| ≤ 1

2ulp(rh), est assuré par la dernière instruction [rh, rl] = FastTwoSum(th, tl). Nous désignerons par la suite cette instruction sous le nom d'étape de renormalisation.

À titre d'exemple, et parce que nous y ferons souvent référence au cours des chapitres suivants, nous formulons ci-dessous le schéma de Horner (algorithme 2.6) en eectuant les calculs internes à l'aide de l'arithmétique double-double. On considère donc un polynôme

3.4. Arithmétiques doubles-doubles et quad-double 41 p(x) =Pni=0aixi à coecients ottants, et x un ottant. Les opérations de l'arithmétique double-double sont ici inlinées, an de détailler la structure de l'algorithme : ces deux opéra-tions sont encadrées dans l'algorithme 3.27. Nous utilisons un appel à TwoProdxh,xl(shi+1, x) au lieu de TwoProd(shi+1, x), an que le découpage de x ne soit eectué qu'une seule fois avant le début de la boucle.

L'algorithme DDHorner nécessite 29n + (1) opérations ottantes. Lorsqu'un FMA est disponible sur la machine cible, TwoProd sera bien entendu remplacé par TwoProdFMA, et la ligne tl = sli+1⊗ x ⊕ tl par tl = FMA(sli+1, x, tl). En présence d'un FMA, l'algorithme DDHorner ne nécessite donc plus que 16n + O(1) opérations ottantes.

Algorithme 3.27. Algorithme de Horner en arithmétique double-double function r = DDHorner(p, x)

[xh, xl] = Split(x) shn= ai; sln= 0 for i = n − 1 : −1 : 0

% double-double = double-double × double : % (phi, pli) = (shi+1, sli+1) ⊗ x

[th, tl] = TwoProdxh,xl(shi+1, x) tl = sli+1⊗ x ⊕ tl

[phi, pli] = FastTwoSum(th, tl)

% double-double = double-double + double : % (shi, sli) = (phi, pli) ⊕ ai [th, tl] = TwoSum(phi, ai) tl = tl ⊕ pli [shi, sli] = FastTwoSum(th, tl) end r = sh0

3.4.2 Arithmétique quad-double

Par extension de la dénition d'un double-double, un quad-double a est un quadruplet (a0, a1, a2, a3) de ottants double precision IEEE-754 tel, que

1. a = a0+ a1+ a2+ a3, et 2. ai⊕ ai+1 = ai, pour i = 0, 1, 2.

Nous ne présentons pas ici les algorithmes introduits dans [35] : les idées sont les mêmes que dans le cas de l'arithmétique double-double, mais les algorithmes sont plus complexes. Précisons néanmoins que les opérations arithmétique dénies dans cet article permettent de simuler quatre fois la double précision IEEE-754, ce qui donne une précision de travail de l'ordre de 212 bits. Comme dans le cas des doubles-doubles, les algorithmes sur les quad-doubles n'eectuent que des opérations élémentaires de l'arithmétique ottante IEEE-754, dans le mode d'arrondi au plus proche.

42 Chapitre 3. Transformations arithmétiques exactes