jeudi 21 février 2019

polexpr et xint : applications (5)

Le polynôme de Rump avec xint

Le polynôme de Rump est bien connu  de tous ceux qui se sont intéressés à la précision des calculs avec des nombres à virgule flottante et il est maintes fois cité sur tous les documents qu'on peut lire sur le sujet.
Voici le polynôme de Rump revu par Jean-François Burnol avec une présentation inédite, ce qui fait qu'on comprend, enfin très simplement, pourquoi ce polynôme est typique des problèmes rencontrés lors des calculs en virgule flottante. Jean-François Burnol s'est aussi intéressé  à l'ordre des opérations lorsqu'on fait le calcul, il a un rôle.
Il détermine aussi la période de la valeur exacte de f (77617, 33096)=-54767/66192.

Il a aussi créé une macro purement développable avec la syntaxe de xintexpr permettant de déterminer la longueur de la période décimale d'une fraction. La procédure est expliquée en détail dans le document. En plus de la valeur du polynôme de Rump, un autre exemple est calculé.
Vous pourrez  calculer avec 1000 000 de chiffres après la virgule 54767/66192, et enregistrer le résultat sur le disque, 3 lignes suffisent :

\immediate\openout\out=Rump-digits.txt
\immediate\write\out{\xintXTrunc{1000000}{\xinteval{Rump(77617,33096)}}

\immediate\closeout\out

Pour terminer cette présentation, je pense qu'après l'avoir lu, vous serez aussi admiratif que moi sur la qualité typographique du document qui avec sa pédagogie et sa rigueur mathématique en font  un document exceptionnel.

En voici le début  :

Son évaluation en x = 77617, y = 33096 est un exemple qui illustre l’un des problèmes typiques des calculs sur les nombres flottants, les « soustractions catastrophiques » : la soustraction de deux nombres très proches l’un de l’autre donnera zéro si l’arrondi de ces nombres à des mantisses de P chiffres est le même, et même si non nul aura en tout cas strictement moins que P chiffres. Or en virgule flottante, tout nombre flottant x doit être vu comme la classe d’équivalence des nombres réels x′ dont l’arrondi à P chiffres significatifs est x.
Le problème est que les x′−y′ exacts peuvent alors correspondre à beaucoup de classes d’équivalence mais que l’ordinateur ayant déjà arrondi x′ et y′ n’en obtiendra qu’une seule. Pour illustrer ce problème écrivons l’expression ci-dessus en mettant 4y en dénominateur commun, et en indiquant les valeurs numériques exactes :
On peut constater que les deux valeurs entières ont un nombre très important de chiffres en commun : 37 sur 43 ! Si l’on transforme ces entiers en des nombres flottants avec P < 37 chiffres, ils deviennent opposés et l’addition donne zéro. Nos calculs en virgule flottante n’utiliseront pas cette réduction à un dénominateur commun (comme le ferait éventuellement un logiciel de calcul formel) et le résultat final ne sera pas nécessairement zéro, mais en tout cas il sera très probablement « aberrant » si P n’est pas au moins 37.
 
 Fichier source et pdf sont accessibles ici :
 Les calculs ont été effectués avec l'extension xint, on appréciera dans ce document leur efficacité, elle est téléchargeable sur le CTAN :    https://ctan.org/pkg/xint

Tous les fichiers concernant les applications des extensions polexpr et xint de Jean-François Burnol présentées dans ce blog et des exemples d'utilisation de celles-ci avec PSTricks sont disponibles aussi sur :



Aucun commentaire:

Enregistrer un commentaire