Deux erreurs communes dans l'arithmétique en virgule flottante en C

Ce tutoriel présentera deux règles à respecter lors de l'exécution de l'arithmétique en virgule flottante en C. Le respect de ces règles évitera la perte d'informations. Exemples avec explications détaillées fournies.

1ère règle: Si un opérateur arithmétique a des opérandes entiers, l'opération sur les entiers est effectuée.

Voyons un exemple.

#include "stdio.h"
principale()
{
float c;
c = 5/9;
printf ("c =% f", c);
getch ();
}

Dans le programme ci-dessus, bien que la variable c semble avoir un type de données float, le programme affiche c = 0.000000. Le programmeur s'attendait probablement à ce que c = 0,555556.

Raison: dans cette expression c = 5/9, le / est l'opérateur arithmétique. 5 et 9 sont les opérandes entiers. Conformément à la règle 1, l'opération sur les nombres entiers est effectuée. Par conséquent, la division entière est tronquée et toute partie décimale est ignorée. Ainsi, l'expression est tronquée à 0.

2ème règle: Si un opérateur arithmétique a un opérande à virgule flottante et un opérande entier, l'entier sera converti en virgule flottante avant la fin de l'opération.

#include "stdio.h"
principale()
{
float c;
c = 5,0 / 9;
printf ("c =% f", c);
getch ();
}

Dans le programme ci-dessus, la variable c a un type de données float et le programme imprime c = 0.555556, sortie exceptée.

Raison: dans cette expression c = 5.0 / 9, le / est l'opérateur arithmétique, 5.0 est un opérande à virgule flottante et 9 est un opérande entier. Conformément à la règle 2 avant l'opération, l'opérande entier est converti en opérande à virgule flottante. L'expression sera c = 5.0 / 9.0. L'expression n'est pas tronquée car il s'agit du rapport entre deux valeurs à virgule flottante et le programme imprime donc c = 0.555556.