Due errori comuni in aritmetica a virgola mobile in C

Questo tutorial mostrerà due regole che devono essere rispettate quando si esegue l'aritmetica in virgola mobile in C. Seguendo queste regole si evita la perdita di informazioni. Esempi con spiegazione dettagliata fornita.

1a regola: Se un operatore aritmetico ha operandi interi, viene eseguita l'operazione numero intero.

Vediamo un esempio.

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

Nel programma precedente, anche se la variabile c sembra avere il tipo di dati float, il programma stampa c = 0,000000. Il programmatore probabilmente si aspettava che c = 0.555556.

Ragionare: in questa espressione c = 5/9, il / è l'operatore aritmetico. 5 e 9 sono gli operandi interi. Come per la prima regola, viene eseguita l'operazione numero intero. Pertanto, la divisione intera tronca e qualsiasi parte frazionaria viene scartata. Pertanto, l'espressione viene troncata a 0.

2a regola: Se un operatore aritmetico ha un operando a virgola mobile e un operando intero, il numero intero verrà convertito in virgola mobile prima che l'operazione venga eseguita.

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

Nel programma precedente, la variabile c ha un tipo di dati float e stampe di programmi c = 0.555556, eccetto l'output.

Ragionare: in questa espressione c = 5.0 / 9, il / è l'operatore aritmetico, 5.0 è un operando a virgola mobile e 9 è un operando intero. Come per la seconda regola prima che l'operazione venga eseguita, l'intero operando viene convertito in operando in virgola mobile. L'espressione sarà c = 5.0 / 9.0. L'espressione non viene troncata perché è il rapporto di due valori in virgola mobile e quindi il programma stampa c = 0.555556.