Costanti in Virgola Mobile in Linguaggio C

In questa lezione vedremo come scrivere costanti in virgola mobile in linguaggio C.

Impareremo la sintassi per la scrittura in notazione scientifica e come forzare il tipo delle costanti.

Valori letterali in virgola mobile in C

Quando inseriamo delle costanti letterali all'interno dei nostri programmi in C, così come per gli interi, possiamo scrivere direttamente il numero in virgola mobile adoperando il punto per separare la parte intera da quella frazionaria.

Per cui, ad esempio possiamo scrivere il seguente codice perfettamente valido:

double pi = 3.14159;
double e = 2.71828;

Il compilatore provvederà direttamente a convertire il valore letterale in un numero in virgola mobile.

Il linguaggio C offre una certa flessibilità nello scrivere costanti in virgola mobile.

Ad esempio, se la parte intera o la parte frazionaria è pari a zero, possiamo ometterla. La cosa importante è che, per distinguere un numero in virgola mobile da un intero, dobbiamo inserire almeno un punto. Inoltre, non si possono omettere entrambe le parti.

Ad esempio, i seguenti numeri sono tutti validi:

double zero = 0.0;
double uno = 1.;
double mezzo = .5;

Nel primo caso il numero è pari a zero e vanno specificate almeno la parte intera o la parte frazionaria. Non possiamo, infatti, scrivere semplicemente ., ma potremmo scrivere sia 0. che .0.

Nel secondo caso, invece, la parte frazionaria è omessa, 1., ma è comunque presente il punto. Ciò consente al compilatore di capire che si tratta di un numero in virgola mobile. Se avessimo scritto, infatti, 1 il compilatore avrebbe interpretato il numero come un intero.

Analogamente per il terzo caso, dove la parte intera è omessa: .5.

Definizione

Sintassi delle Costanti in Virgola Mobile in C

La sintassi per specificare una costante letterale in virgola mobile in C è la seguente:

<parte intera>.<parte frazionaria>

dove:

  • <parte intera>: parte intera del numero in virgola mobile;
  • <parte frazionaria>: parte frazionaria del numero.

La parte intera e la parte frazionaria possono essere omesse se pari a zero, ma non entrambe.

Il punto è obbligatorio per distinguere un numero in virgola mobile da un intero.

Normalmente, le costanti in virgola mobile vengono considerate come double dal compilatore. Per cui, se scriviamo il codice seguente:

float f = 3.14;

quello che accade è che il valore 3.14 viene considerato come un double e poi convertito automaticamente in float. Questo processo, però, potrebbe in alcuni casi portare ad una perdita di precisione dal momento che un float usa meno bit di un double. Infatti, in questi casi i compilatori mostrano un warning.

Per risolvere tale problema, si può utilizzare il suffisso f o F per forzare il compilatore a considerare la costante come un float:

float f = 3.14f;

Analogamente, per forzare una costante in virgola mobile a essere considerata come un long double, si può utilizzare il suffisso l o L:

long double ld = 3.14l;
Definizione

Forzatura del Tipo delle Costanti in Virgola Mobile

Per forzare il compilatore a considerare una costante letterale in virgola mobile come un tipo specifico, si può apporre un suffisso alla costante stessa. I suffissi sono:

  • f o F per float;
  • l o L per long double.

Notazione Scientifica in linguaggio C

Scrivere i numeri reali con la virgola (più precisamente con il punto) può risultare comodo per valori medi. Il problema si pone per numeri molto grandi o molto piccoli.

Ad esempio, se vogliamo scrivere il numero 0.0000000000123 potremmo scrivere:

double numero = 0.0000000000123;

Ma, in questo modo, la scrittura del codice risulta macchinosa in quanto non è subito chiaro ad occhio quanti zeri siano presenti.

Per questo motivo, il linguaggio C permette di scrivere i numeri in notazione scientifica proprio come si usa fare in matematica, fisica ed ingegneria.

La sintassi è molto semplice. Ritorniamo all'esempio di sopra. Il numero 0.0000000000123 in notazione scientifica si scrive come:

1.23 \times 10^{-11}

Il che risulta molto più chiaro e immediato.

Per scrivere in notazione scientifica in C, si utilizza la lettera e o E seguita dall'esponente. Ad esempio, il numero di sopra si scrive come:

double numero = 1.23e-11;

Quindi la sintassi è:

<mantissa>e<esponente>

dove <mantissa> è la parte principale del numero e rispetta le stesse regole viste sopra del punto decimale, e <esponente> è l'esponente del numero che, invece, è un numero intero con segno.

Di seguito, riportiamo alcuni esempi di numeri scritti in notazione scientifica:

/* 1.23 * 10^-11 */
double numero1 = 1.23e-11;

/* -6.02 * 10^23 */
double numero2 = -6.02E23;

/* 3 * 10^8 */
double numero3 = +3.E8;

/* 0.45 * 10^10 */
double numero4 = .45e10;

Anche nel caso dei numeri scritti in notazione scientifica possiamo forzare il tipo apponendo F o f per float e L o l per long double.

float f = 1.23e-11f;
long double ld = 1.23e-11l;
Definizione

Sintassi delle Costanti in Virgola Mobile in Notazione Scientifica

La sintassi per specificare una costante letterale in virgola mobile usando la notazione scientifica in C è la seguente:

<mantissa>e<esponente><tipo>

dove:

  • <mantissa>: parte principale del numero in virgola mobile;
  • e: lettera e o E che separa la mantissa dall'esponente;
  • <esponente>: esponente del numero;
  • <tipo>: suffisso per forzare il tipo della costante. Il suffisso può essere:

    • f o F per float;
    • l o L per long double;
    • se omesso la costante viene considerata come double.

In Sintesi

In questa lezione abbiamo visto come scrivere all'interno del codice costanti in virgola mobile in C.

Abbiamo visto che:

  • le costanti in virgola mobile si scrivono con il punto per separare la parte intera da quella frazionaria;
  • si può omettere la parte intera o la parte frazionaria se pari a zero, ma non entrambe;
  • per forzare il tipo della costante si può apporre un suffisso: f o l;
  • si possono scrivere costanti in notazione scientifica usando la lettera e o E.

Nella prossima lezione vedremo come leggere e scrivere numeri in virgola mobile da e su console.