Maison  >  Article  >  développement back-end  >  L’ordre d’addition en virgule flottante est-il important pour une accumulation précise ?

L’ordre d’addition en virgule flottante est-il important pour une accumulation précise ?

DDD
DDDoriginal
2024-11-01 21:22:29931parcourir

Does the order of floating-point addition matter for accurate accumulation?

Accumulation à virgule flottante : précision et ordre

Lors de l'accumulation de nombres à virgule flottante, l'ordre dans lequel ils sont ajoutés peut avoir un impact significatif impact sur la précision du résultat.

Ordre croissant pour une précision améliorée

Votre intuition est correcte. L'ajout de nombres par ordre croissant améliore généralement la précision. Considérons un scénario avec des flotteurs simple précision :

  • Un cas extrême : 1 milliard de valeurs de 1 / (1 milliard), plus une valeur de 1.

Si le 1 est ajouté en premier, la somme devient 1 en raison d'une perte de précision. L'ajout des autres valeurs n'a aucun impact.

Si les petites valeurs sont ajoutées en premier, elles s'accumulent quelque peu, mais après un certain point, elles perdent également en précision.

Valeurs négatives et inexactitude.

Cependant, l'ordre croissant peut devenir inadéquat s'il s'agit de nombres négatifs. Considérons les valeurs suivantes : 1, -1, 1 milliardième.

Seules deux commandes produisent le résultat correct (1 milliardième) : 1, -1, 1 milliardième ou -1, 1, 1 milliardième. Pour les commandes restantes, le résultat est inexact.

Techniques avancées d'accumulation

Pour les cas extrêmes, des techniques plus avancées sont nécessaires :

  • Totaux cumulés par grandeur : divisez les valeurs en groupes en fonction de l'ampleur et calculez les totaux pour chaque groupe. Combinez ces totaux par ordre croissant, en utilisant efficacement un type à précision arbitraire.

Pertinence pour la programmation du monde réel

Bien que ce problème puisse ne pas sembler directement pertinent à la programmation pratique, cela peut survenir dans des scénarios spécifiques :

  • Lors de l'accumulation de petites valeurs insignifiantes et de quelques valeurs élevées, la précision peut être compromise.
  • Lorsque l'on traite des queues lourdes (de nombreuses petites valeurs qui peuvent ne pas affecter individuellement la somme) ou perte de précision due à des combinaisons additives de petites valeurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn