s
19 708 Pages

un chiffres de garde Il est un chiffre dans la représentation d'un nombre à virgule flottante dans la phase de calcul, afin de limiter les échecs des l'arrondissement et annulation numérique.[1]

propriété

Etant donné que dans la représentation à virgule flottante est utilisé un nombre fixe de chiffres significatifs Ils peuvent poser des problèmes de précision, en particulier dans les opérations de soustraction lors de l'utilisation sur le nombre qui ont ordre de grandeur ou des valeurs très différentes très proche (un problème appelé « annulation catastrophique »). Lorsque vous faites la soustraction de nombres à virgule flottante à base b avec p chiffre, l'erreur relative du résultat peut être égal à b - 1. En effet, compte tenu de la différence entre 1,0 et 0 ... 0,à...à (où à = b - 1), le diminuteur est décalé d'un chiffre et la différence calculée en virgule flottante sera égal à b-p + 1, tandis que le résultat exact serait b-p, avec une erreur relative égale à[2]

.

Être le nombre c les chiffres contaminés d'une erreur relative de n·ε égale à logbn, base 2, nous avons que tous p chiffres du résultat sont potentiellement contaminés:[2]

.

Par exemple, le résultat de 10,1 - 9,93 est de 0,17, mais en effectuant le calcul avec 3 chiffres en virgule flottante a 1,01 × 101  - 0,99 × 101  = 0,02 × 101  = 2 × 10-1 , avec une 30 erreur ULP et un résultat incorrect dans tous les chiffres.

Pour éviter ce problème, vous pouvez effectuer le calcul à l'aide d'un chiffre supplémentaire dans le calcul (le chiffre de garde), tronquant les opérandes p + 1 chiffres et arrondir le résultat au plus tard p chiffres. On montre que dans ce cas, l'erreur relative sur le résultat est limité à moins de 2 · ε.[2]

laisser x et y deux nombres en virgule flottante positif sur la base de b et p chiffre soustrait en utilisant p + 1 chiffre dans le calcul. Sans perte de généralité, vous pouvez échanger les deux valeurs x > y, et l'échelle à la fois de telle sorte que x soit sous la forme x0.x1...xp-1 × b0 . si y est sous la même forme, la différence sera exacte. si y Il est sous la forme 0.y1....yp-1 × b0 puis le chiffre de garde assure que la différence est calculée exactement et arrondi ultérieur conduit à une plus ε d'erreur. Si en général y il contient k zéros dans la position la plus importante, ou il est sous la forme 0,0 ... 0yk + 1...yk + p × b0 , dans le calcul, il est tronqué à p + 1 chiffres à la valeur y, avec une erreur absolue

.

L'arrondi ultérieure après la différence implique une δ d'erreur est limitée par ε

pour lequel l'erreur globale de l'opération sera égale à

.

Il y a trois cas:

  • si x - y ≥ 1, l'erreur relative est limitée par
    ;
  • si x - y < 1, si ha δ = 0 e, nel caso peggiore, con x = 1 et les chiffres ne suppriment pas de y égal à b - 1, la différence est limitée inférieurement par , avec une erreur relative limitée par
    ;
  • si x - y < 1 ma x - y ≥ 1, doit être x - y = 1, puis δ = 0, donc il vaut toujours la limite supérieure de l'erreur relative constaté dans le cas précédent.[3]

soutien

Les chiffres de garde sont essentiels pour contenir l'erreur de soustraction de phase entre nombres à virgule flottante, ainsi que leur absence entraîne de graves erreurs de calcul et limite la portabilité des algorithmes. Dans les années 1960 le premier mainframe IBM System / 360, Produits de 1964 à 1967, fonctionnaient sans eux, ainsi que HP-80 calculatrices. en 1968, IBM Il a ajouté le chiffre de garde dans le calcul en architecture à virgule flottante System / 360, d'abord en une seule précision et aussi à la double précision. Tous les fabricants d'ordinateurs se sont adaptés rapidement, et a été une exception notable Cray, qui a continué à produire jusqu'à 1995 différents modèles informatiques (Cray-1, Cray-2, Cray X-MP, Cray Y-MP, Cray C90) Sans chiffres de garde, qui ont souffert d'erreurs visibles dans certains algorithmes en virgule flottante.[4]

la norme IEEE 754 Elle exige que, conformément aux mises en œuvre, les opérations en virgule flottante élémentaires doivent fournir le même résultat qui serait si calculé avec une précision infinie puis arrondie dans l'une des façons possibles (arrondi à la machine numéro le plus proche, ±Inf ou troncature à zéro). un bit garde ne garantit pas toujours ce résultat dans chaque opération, qui peut être obtenu par l'utilisation d'un second bit de garde et un troisième bit dudit gluant, qui prend la valeur 'logique ou de tous les bits restants.[5]

notes

  1. ^ Borowski Borwein, p. 62.
  2. ^ à b c Goldberg, p. 9.
  3. ^ Goldberg, p. 37.
  4. ^ Higham, p. 44.
  5. ^ Higham, p. 41.

bibliographie

  • Ephraim J. Borowski et Jonathan M. Borwein, chiffres de garde, Stracca dans A. (ed), Collins Dictionnaire de mathématiques, Gremese, 2004 ISBN 9-788-8844-0338-4.
  • David Goldberg, Ce que tout informaticien doit savoir sur Virgule flottante Arithmétique, en ACM Computing Surveys, Mars 1991.
  • Nicholas J. Higham, La précision et la stabilité des algorithmes numériques, 2e éd., SIAM 2002 ISBN 978-0-8987-1521-7.