See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Numero in virgola mobile - Wikipedia

Numero in virgola mobile

Da Wikipedia, l'enciclopedia libera.

Il termine numero in virgola mobile (in inglese floating point) indica il metodo di rappresentazione dei numeri razionali (e di approssimazione dei numeri reali) e di elaborazione dei dati usati dai processori per compiere operazioni matematiche. Si contrappone all'aritmetica intera o in virgola fissa. In informatica viene usata solitamente in base 2; in questo caso può essere considerata l'analogo binario della notazione scientifica in base 10. L'uso di operazioni aritmetiche in virgola mobile è ad oggi il metodo più diffuso per la gestione di numeri reali.

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

  • un campo di mantissa m;
  • un campo di esponente e.

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

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

 \operatorname{a} = \operatorname{M} \times \operatorname{b}^E

Questo metodo di scrittura permette di rappresentare un larghissimo insieme numerico all'interno di un determinato numero di cifre, cosa che la virgola fissa non concede. Un numero è caratterizzato dal valore b, che costituisce la base della notazione in cui è scritto il numero, e la quantità p 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à p cifre d comprese tra 0 e b-1). Se la prima cifra della mantissa non è zero, il numero è definito normalizzato. (Se viene usato il campo s, 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:

le due notazioni sono identiche.

Viene però utilizzata rappresentazione normalizzata: la parte frazionaria è minore di 1 e la cifra più significativa è diversa da 0, quindi nell'esempio la notazione corretta è:

La rappresentazione in virgola mobile è 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:

  • MANTISSA * 2ESPONENTE

in cui mantissa ed esponente possono avere segno + o segno -

[modifica] Problemi con l'uso della virgola mobile

In generale, questo tipo di numeri si comportano 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 da nessun sistema binario in virgola mobile). Per questo non è un formato impiegato ad esempio 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.: 2/3=0,666667);
  • 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 diverso da zero, danno 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è fl(x)=segno(x)(0.a1a2...an)bexp(p) allora si avrà 1/b*bexp(p)<=|x|<bexp(p) e quindi se x è il valore da rappresentare e fl(x) il relativo valore in notazione virgola mobile con mantissa di t cifre allora l'errore assoluto sarà |x-fl(x)|<=bexp(-t)*bexp(p)=bexp(p-t) com'è intuitivo pensare, mentre invece l'errore relativo, che tiene conto della grandezza del numero in esame sarà |x-fl(x)|/|x|<=bexp(1-t) poiché se |x|>=bexp(1-p) allora 1/|x|<=bexp(p-1) e quindi bexp(p-t)*bexp(1-p)=bexp(1-t). In particolare l'errore relativo è variabile ma sempre al di sotto del valore trovato (che infatti non dipende da p e quindi non dipende dal numero rappresentato, come invece fa l'errore assoluto) che viene anche detto precisione macchina.

[modifica] Proprietà dell'aritmetica in virgola mobile

Questa aritmetica presenta due fondamentali differenze dall'aritmetica reale:

  • l'aritmetica in virgola mobile non è associativa: in generale, per i numeri in virgola mobile,

 (x + y) + z \neq x + (y + z)
 (x \cdot y) \cdot z \neq x \cdot (y \cdot z)  ;

  • l'aritmetica in virgola mobile non è distributiva:in generale,

 x \cdot (y + z) \neq (x \cdot y) + (x \cdot z) .

  • 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, 1,0 + (10100 + -10100) dà come risultato 1,0, mentre (1,0 + 10100) + -10100 dà 0,0.

[modifica] Voci correlate


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -