Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
• un bit di segno S<br />
Tabella 7.3: I tipi a virgola mobile previsti nel linguaggio C.<br />
• un campo di esponente E<br />
• un campo di mantissa N<br />
tipo significato<br />
float precisione semplice<br />
double precisione doppia<br />
long double precisione estesa<br />
A partire da questa codifica, il valore effettivo del numero viene calcolato come segue:<br />
(−1) S · 2 E · N<br />
A seconda del numero di bit dedicati a ciascun campo, si possono distinguere tipi floating<br />
point caratterizzati da diversa precisione. I tipi a virgola mobile disponibili in C sono elencati in<br />
Tabella 7.3<br />
Le costanti a virgola mobile hanno le seguenti caratteristiche:<br />
• i tipi double sono caratterizzate o dal punto decimale o dall’esponente (es. 133.3 o 78e-5)<br />
• i tipi float sono caratterizzate dal suffisso f(F) (es. 133.3f o 78e-5F)<br />
• i tipi long double sono caratterizzate dal suffisso l(L) (es. 133.3l o 78e-5L)<br />
NOTA Non utilizzare mai l’o<strong>per</strong>atore == <strong>per</strong> effettuare confronti tra valori in virgola<br />
mobile. A causa degli arrotondamenti con cui vengono memorizzati, i valori<br />
possono differire dal valore atteso <strong>per</strong> qualche decimale, e far fallire confronti<br />
di uguaglianza.<br />
Ad esempio, se raggio è una variabile di tipo float, <strong>per</strong> testare se la variabile vale, diciamo<br />
10.0, la seguente istruzione potrebbe fallire<br />
float raggio;<br />
if (raggio == 10.0) {<br />
...<br />
}<br />
ed è quindi meglio effettuare un test del tipo:<br />
float raggio;<br />
float epsilon = 0.00001;<br />
if (fabs(raggio - 10.0)