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; }
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 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!