Come faccio a convertire in binario la parte frazionaria di un numero reale ?

La rappresentazione di un numero con il sistema posizionale assegna un valore diverso alle cifre a seconda della loro posizione rispetto alla prima a destra, valore legato alla potenza della Base. Quindi per la nostra usuale numerazione decimale (base dieci) siamo abituati a pensare in termini di unità, decine, centinaia ecc.

Se usiamo la base due dobbiamo pensare un numero espresso in unità, coppie, quartine ecc.
Per esempio il numero Undici, che in decimale è una decina più una unità 11(10) in binario diventa un’ottavina, zero quartine, una coppia e un’unità 1011(2)
Analogamente per i numeri frazionari in decimale abbiamo i decimi, i centesimi ecc, mentre in binario avremo le metà, i quarti, gli ottavi ecc.

Matematicamente questo si sintetizza nella elegante formula polinomiale di un numero:

dove le ak sono le cifre nella base B.

Per passare da una base all’altra basta dividere il numero per la più grande potenza di B minore di questo numero e continuare a dividere i resti per le potenze inferiori. I quozienti sono le cifre ordinate del numero nella base usata.

Ad esempio per rappresentare in base 2 il numero N=156.375 si procede come nella tabella

 potenza 8 -1  -2  -3  -4 
 2k 256  128  64  32  16  0.5  0.25  0.125  0.0625 
 quoziente
 resto N 28.375  28.375 28.375 12.375 4.375 0.375  0.375  0.375  0.375 0.125 

0


il numero è quindi
10011100.011(2)

Si noti che i quozienti vengono sempre 0 o 1, e questo discende naturalmente dalla scelta della base; lo stesso numero nella base esadecimale si esprime (con lo stesso procedimento)

 potenza 2 -1  -2 
 16k 256  16  0.0625  0.00390625 
 quoziente 12 
 resto N 12.375  0.375  0 0

il numero è 9C.6(HEX)

Per non perdere l’orientamento su questo procedimento facciamolo anche per la base 10:

potenza -1  -2  -3  -4 
 10k 1000  100  10  0.1  0.01  0.001  0.0001 
quoziente
 resto 56.375  6.375  0.375  0.075  0.005  0 

Un altro metodo, forse anche più semplice consiste nel dividere iterativamente la parte intera del numero per la base, e i resti delle divisioni rappresentano le cifre del numero nella base scelta, in ordine inverso.
Per la parte decimale bisogna moltiplicare per la base finché non si annulla la parte decimale, e se si supera l’unità la cifra corrispondente sarà 1 e si procede con la parte decimale, altrimenti la cifra sarà 0.

Lo stesso numero di prima 156.375 viene diviso quindi in 156 e 0.375

156

quoziente  resto 
78 
39 
19 

156(10)=10011100(2)

0.375

prodotto  parte intera  parte decimale 
0.75  0.75 
1.5  0.5 
1

0.375(10)=0.011(2)

e si riottiene

156.375(10)=10011100.011(2)

Nei computer i numeri frazionari si memorizzano di solito in virgola mobile (floating point), in cui il numero espresso nella forma

N(2)=1.xxxx 2eeee

si memorizzano i bit della mantissa che seguono la virgola (l’uno viene eliminato per risparmiare memoria), e l’esponente di 2.

Lo standard IEEE 754 prevede due formati:
– singola precisione, a 32 bit, 24 per la mantissa e 8 per l’esponente
consente di esprimere numeri da 1038 a 10-38 positivi e negativi, con precisione di 6 cifre decimali
– doppia precisione, a 64 bit, 53 per la mantissa e 11 per l’esponente
consente di rappresentare numeri da 10308 a 10-308 positivi e negativi, con precisione di 15 cifre decimali

Links
http://www.mat.unical.it/didattica/clinfor/IntrInfoWeb/materiale_didattico/dispensa3.pdf
http://it.wikipedia.org/wiki/Sistema_numerico_binario