• Aucun résultat trouvé

La conception d’une bibliothèque arithmétique d’intervalles décimale multi-précision ne s’effectue pas à partir de zéro. Nous souhaitons optimiser nos travaux en nous basant sur des bibliothèques existantes, éprouvées et performantes.

4.1.1 Choix de GNU MP et MPFR

Des études de faisabilité de l’implémentation de bibliothèques arithmétiques de cal-culs à virgule flottante décimaux ont montré que la méthode la plus simple et efficace d’implémenter des opérations décimales est d’utiliser leurs équivalents binaires [103]. De cette façon, il est possible de s’appuyer sur la base solide et l’efficacité de l’arithmétique binaire à virgule flottante et concentrer nos efforts d’implémentation sur certains points critiques.

Plusieurs critères sont à prendre en compte pour les choix d’implémentation de cette bibliothèque arithmétique d’intervalles décimale multi-précision. Ils dépendent des deux objectifs que l’on souhaite atteindre avec le développement de cette bibliothèque :

• l’arrondi correct en décimal pour une précision arbitraire, et • l’efficacité et la rapidité des calculs.

Nous souhaitons implémenter une bibliothèque fiable qui remplisse les propriétés d’arrondi correct en décimal pour une précision arbitraire. Nous voulons également une bibliothèque rapide, qui, quand bien même ne parviendra pas à égaler les performances d’une bibliothèque arithmétique binaire très optimisée écrite en assembleur, puisse fournir des résultats décimaux fiables en un temps raisonnable. Comme nous décidons de nous reposer sur des fonctions binaires pour le calcul des fonctions arithmétiques complexes pour optimiser le coût d’implémentation, nous souhaitons que la bibliothèque binaire choisie soit rapide pour ne pas induire un surcoût trop élevé.

Plusieurs bibliothèques binaires de calculs en multi-précision existent, comme ré-pertoriées dans le chapitre 2. Conformément à nos prérequis, nous choisissons de nous reposer sur GNU MP [49] et MPFR [11], bibliothèques fiables et performantes, fournissant les propriétés d’arrondi correct en multi-précision en binaire.

4.1.2 Représentation d’intervalles décimaux multi-précision

Dans ce chapitre, nous allons travailler avec les ensembles des nombres à virgule flottante binaires et décimaux représentables à une certaine précision binaire k2ou une certaine précision décimale k10, présentés dans le chapitre 2. Nous adoptons la notation suivante :

• x, y, z ∈ R représentent les nombres réels, • x, y, z ∈ Z : les entiers signés,

• x2, y2, z2∈ F2k2 : les nombres à virgule flottante binaires à la précision k2, • x10, y10, z10∈ F10k10: les nombres à virgule flottante décimaux à la précision k10,

• ε, η, θ : les erreurs.

Au début de ces travaux il n’existait pas, à notre connaissance, de bibliothèque d’arith-métique décimale multi-précision bas niveau. Les bibliothèques disponibles comme Big-Decimal [55]1étant des bibliothèques de haut niveau, elles ne peuvent pas servir de base pour une bibliothèque d’arithmétique d’intervalles décimale répondant à des besoins de performances. De plus BigDecimal, bien que proposant les arrondis dirigés, ne donne aucune indication sur sa conformité avec l’arrondi correct, ce qui est problématique pour l’utilisation dans le cadre de la certification.

Il existe la bibliothèque mpdecimal [56]2qui repose uniquement sur GNU MP et MPFR, de la même façon que celle que nous voulons développer et garantissant l’arrondi cor-rect. Un des points clefs de notre développement est de pouvoir fournir des opérations de conversion entre les formats multi-précision binaire et décimal. La bibliothèque mp-decimal est limitée dans son interface avec les formats à virgule flottante binaire et ne propose pas d’opérations trigonométriques. De plus la précision courante est attachée à un contexte, et non aux variables. La gestion d’un algorithme multi-précision où chaque variable a une précision courante différente est donc complexe. Nous souhaitons effectuer une comparaison avec cette bibliothèque pour s’assurer de l’exactitude de nos résultats, ainsi que confronter leurs performances temporelles.

Nous souhaitons donc commencer nos travaux par définir une bibliothèque décimale multi-précision qui proposera un nombre intéressant d’opérations arithmétiques sur laquelle reposera notre bibliothèque d’intervalles.

Le format d’un nombre décimal multi-précision est le suivant :

x10:= n · 10F, x10∈ F10k10, (4.1)

tel que

• n ∈ Z la mantisse, un entier signé GMP, • F ∈ Z l’exposant, un entier signé 64 bits,

• une information additionnelle à propos de la classe de x10(NaN, ±∞, ±0 ou un nombre décimal)

• k10≥ 2 la précision décimale en chiffres décimaux après la virgule, la bibliothèque va garantir que 1 ≤ |n| ≤ 10k10− 1 en toutes circonstances.

1. https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html =

Dans notre bibliothèque, nous représentons les intervalles avec deux nombres déci-maux multi-précision de la façon suivante :

£x10, x10¤ :=nx ∈ R | x10≤ x ≤ x10 | x10, x10∈ F10k10o. (4.2) La norme IEEE 754-2008 [38] définit un format de nombres à virgule flottante décimaux. Grâce à la normalisation des exposants, un nombre à virgule flottante binaire n’a qu’une représentation unique. Ce n’est pas le cas pour les nombres à virgule flottante décimaux, qui de par leur définition peuvent avoir plusieurs représentations pour une même valeur. Ces différentes représentations sont appelées une cohorte.

Le quantum d’un nombre représenté dans le format à virgule flottante décimal en précision finie est la valeur de l’unité en dernière position de sa mantisse. Le quantum est utilisé pour distinguer deux nombres d’une même cohorte, c’est-à-dire deux représentation d’un même nombre à virgule flottante décimal.

Le format décimal que nous définissons est compatible avec le format à virgule flottante décimal définit dans la norme IEEE 754-2008, mais n’introduit pas la notion de quantum et n’est donc pas conforme à cette norme.

4.1.3 Architecture haut niveau

Pour implémenter notre bibliothèque d’arithmétique d’intervalles décimale multi-précision, nous avons choisi de nous reposer sur la bibliothèque GNU MP pour la définition de notre format décimal. En supposant l’arrondi correct des opérations de conversion entre le format binaire et décimal, nous voulons utiliser des fonctions binaires pour l’implémen-tation de notre bibliothèque. Pour calculer les fonctions binaires en multi-précision nous avons choisi d’utiliser la bibliothèque MPFR.

La bibliothèque Multi-Precision Decimal with Intervals (MPDI), est construite sur la bibliothèque Multi-Precision Decimal (MPD), de la même façon que MPFI se base sur la bibliothèque MPFR, comme présenté dans la figure 4.1. Un intervalle est représenté par ses deux bornes décimales qui sont des nombres MPD. Le calcul de ces bornes est réalisée par l’appel des fonctions décimales MPD avec des arrondis dirigés.

La figure 4.2 illustre les opérations multi-précision décimales supportées par la biblio-thèque MPD, ainsi que leurs dépendances aux fonctions GMP et MPFR. Au moins une opération binaire est appelée dans chaque opération décimale. L’exactitude des résultats données en multi-précision décimale repose sur l’exactitude et l’arrondi correct des deux algorithmes de conversion.

MPD

MPDI

MPFR

MPFI

GMP

FIGURE4.1 – Architecture haut niveau, conception des bibliothèques MPD et MPDI

mpd_get_fr

Conversion décimal vers binaire

mpd_set_fr

Conversion binaire vers décimal

mpd_sub

Soustraction avec

mpz_sub

mpd_add

Addition avecmpz_add

mpd_mul

Multiplication avec

mpz_mul

mpd_div

Division avecmpfr_div

mpd_sqrt

Racine carrée avec

mpfr_sqrt mpd_exp Exponentielle avec mpfr_exp mpd_log Logarithme avec mpfr_log avec un traitement spécial autour de 1

FIGURE4.2 – Architecture globale de la bibliothèque MPD