Maison > développement back-end > C++ > Comment pouvons-nous surmonter les problèmes de précision en arithmétique à virgule flottante ?

Comment pouvons-nous surmonter les problèmes de précision en arithmétique à virgule flottante ?

Linda Hamilton
Libérer: 2024-12-01 00:22:15
original
773 Les gens l'ont consulté

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

Surmonter les problèmes de précision dans les nombres à virgule flottante

Les nombres à virgule flottante, un type de données largement utilisé en informatique, présentent des problèmes de précision potentiels dus à leur représentation intrinsèque dans la machine. Pour illustrer ce problème :

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
Copier après la connexion

Dans ce code, str est une représentation sous forme de chaîne de "4.600", et l'appel de atof(str) le convertit en un double mw. Les calculs ultérieurs donnent un résultat malheureux : la représentation à virgule flottante de 4,59999999999999996 ne peut pas représenter avec précision la valeur souhaitée de 4,600.

Résoudre le problème

Comme le souligne la solution , obtenir une égalité exacte avec l'arithmétique à virgule flottante est pratiquement impossible. Au lieu de cela, il est préférable de comparer les valeurs dans une plage acceptable. Dans certains scénarios, il est essentiel de reconnaître que des valeurs spécifiques ne peuvent pas être représentées avec précision sous forme de nombres à virgule flottante.

Ressources recommandées

Pour plus d'informations, consultez les références suivantes :

  • [Ce que tout informaticien devrait savoir sur la virgule flottante Arithmétique](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [Comparaison de nombres à virgule flottante](https://floating-point-gui. de/)

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal