18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

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)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!