Numero in virgola mobile

metodo di rappresentazione dei numeri reali usato in informatica
(Reindirizzamento da Floating point)

Il termine numero in virgola mobile (in inglese floating point) in analisi numerica indica il metodo di rappresentazione approssimata dei numeri reali e di elaborazione dei dati usato dai processori per compiere operazioni matematiche.

Rappresentazione binaria del numero 0,15625 su 32 bit

Si contrappone all'aritmetica intera e a quella in virgola fissa (in inglese fixed-point). In informatica viene usata solitamente in base 2 e in questo caso può essere considerata l'analogo binario della notazione scientifica in base 10.

L'uso di operazioni aritmetiche in virgola mobile è oggi il metodo più diffuso per la gestione di numeri reali e della loro approssimazione razionale nella memoria dei computer.

Descrizione

modifica

Un numero in virgola mobile è costituito, nella sua forma più semplice, da due parti:

  • un campo significando o mantissa  ;
  • un campo esponente  .

In alcuni casi, ad esempio nello standard IEEE 754, si ha un ulteriore campo: il segno  ; ma ciò verrà trattato specificamente nella voce relativa.

Un generico numero reale   può così essere rappresentato come (si indica con le lettere maiuscole il significato aritmetico dei campi):

 

Questo metodo di scrittura permette di rappresentare un amplissimo insieme numerico all'interno di un determinato numero di cifre, cosa che la virgola fissa non concede. Un numero è caratterizzato dal valore  , che costituisce la base della notazione in cui è scritto il numero, e la quantità   di cifre presenti nella mantissa, detta precisione. La mantissa di un numero scritto con questo metodo si presenta quindi nella forma ±d.ddd...ddd (una quantità   di cifre d comprese tra 0 e  ). Se la prima cifra della mantissa è diversa da zero, si dice che la rappresentazione è normalizzata. (Se viene usato il campo  , la mantissa deve essere positiva, e questo bit ne determina il segno).

L'insieme dei numeri in virgola mobile include i valori  ,   (più o meno infinito) e NaN (not a number, usato per definire i risultati di operazioni impossibili o non valide).

Nel linguaggio C, la rappresentazione in virgola mobile di un numero razionale float o double deriva dalla rappresentazione scientifica. Nella rappresentazione scientifica un numero è prodotto in due parti: la seconda, detta fattore di scala, è una potenza di 10, l'altra parte, detta parte frazionaria, è un numero tale che, moltiplicato per il fattore di scala, restituisce il numero che vuole rappresentare. Esistono dunque vari modi di rappresentare uno stesso numero, per esempio:

  • 0,07824×105
  • 0,7824×104
  • 7,824×103
  • 78240×10−1

le quattro notazioni sono equivalenti.

Viene però utilizzata la rappresentazione normalizzata: in essa, si impone che la parte frazionaria sia sempre minore di 1 e la cifra più significativa sia sempre diversa da 0. Quindi, nell'esempio sopra considerato, la notazione corretta è solo la seconda:

  • 0,7824×104

La rappresentazione in virgola mobile è dunque la rappresentazione scientifica normalizzata con l'utilizzo del sistema binario; dunque il fattore di scala è una potenza di 2. La parte frazionaria viene detta mantissa mentre l'esponente della potenza di due è detto esponente. Il numero razionale è dunque così rappresentato:

  •  

in cui mantissa ed esponente possono avere segno + o segno −.

Proprietà dell'aritmetica in virgola mobile

modifica

Questa aritmetica presenta due fondamentali differenze dall'aritmetica reale:

  • l'aritmetica in virgola mobile non è associativa: in generale, per i numeri in virgola mobile,
 
 
  • l'aritmetica in virgola mobile non è distributiva: in generale,
 .
  • esistono l'elemento neutro della moltiplicazione, l'elemento neutro dell'addizione e l'opposto, ma non sono unici.

In definitiva, l'ordine in cui vengono eseguite più operazioni in virgola mobile può variarne il risultato. Questo è importante per l'analisi numerica, in quanto due formule matematicamente equivalenti possono dare risultati diversi, uno anche sensibilmente più accurato dell'altro. Per esempio, nella maggior parte delle applicazioni in virgola mobile,   dà come risultato  , mentre   .

Problemi con l'uso della virgola mobile

modifica

In generale, questo tipo di numeri si comporta in modo molto simile ai numeri reali. Tuttavia ciò porta spesso i programmatori a non considerare l'importanza di un'adeguata analisi numerica sui risultati ottenuti. Ci sono molte incongruenze tra il comportamento dei numeri in virgola mobile in base 2, impiegati nell'informatica, e quello dei numeri reali, anche in casi molto semplici (ad esempio la frazione 0,1 che non può essere rappresentata in maniera esatta da nessun sistema binario in virgola mobile). Per questo motivo, ad esempio, il formato non è impiegato in campo finanziario.

Le cause principali di errore nel calcolo in virgola mobile sono:

  • arrotondamento
    • numeri non rappresentabili (ad esempio 0,1);
    • arrotondamento di operazioni aritmetiche (es.:  );
  • assorbimento (es.: 1×1015 + 1 = 1×1015);
  • cancellazione (es.: sottrazione di due numeri molto vicini);
  • overflow (con segnalazione di risultato infinito);
  • underflow (dà come risultato 0, un numero subnormale o il più piccolo numero rappresentabile);
  • operazioni impossibili (es.: radice quadrata di un numero negativo dà come risultato NaN);
  • errori di arrotondamento: a differenza della virgola fissa, l'impiego del dithering sulla virgola mobile è pressoché impossibile.

La virgola mobile appare più appropriata quando si richiede una certa precisione relativa al valore. Quando è richiesta una precisione assoluta, la virgola fissa sembra una scelta migliore.

Riguardo all'errore di precisione che provoca l'utilizzo della virgola mobile, innanzitutto notiamo che se x è il numero rappresentato, cioè

 

allora si avrà

 

e quindi, se x è il valore da rappresentare e   il relativo valore in notazione virgola mobile con mantissa di   cifre, allora l'errore assoluto sarà:

 

com'è intuitivo pensare, mentre invece l'errore relativo, che tiene conto della grandezza del numero in esame sarà:

 

quest'ultima maggiorazione è facilmente ricavabile dalla formula dell'errore assoluto: infatti, siccome   allora   e quindi:

 .

In particolare, l'errore relativo, anche se variabile, è sempre al di sotto del valore trovato: quest'ultimo, non dipende dal numero rappresentato (infatti non dipende da  , a differenza dell'errore assoluto) e per questo motivo viene anche detto precisione macchina.

Esempio di calcolo del valore

modifica

partendo dall'esempio mostrato in figura:

 

dove sign, exponent e fraction vengono letti come numeri interi positivi.

quindi:

 

Bibliografia

modifica
  • Davide Manca, Calcolo numerico applicato, Bologna, Pitagora Editrice, 2007, ISBN 88-371-1697-7.

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica