[C] Conversione di codice binario a virgola fissa

joya89
Si puo' definire una funzione di conversione dal codice a virgola fissa (senza segno) di lunghezza 16 con 8 bit per la parte frazionaria a quello a virgola fissa (senza segno) di lunghezza 16 con 4 bit per la parte frazionaria,minimizzando l'errore di approssimazione?
Se si, come potrei minimizzare l,errore senza dover ricorrere alla decodifica?

Risposte
apatriarca
È da un po' che non lavoro con numeri a virgola fissa ma a occhio mi sembra che la conversione si possa fare con un codice tipo il seguente: (numero + 8) >> 4

joya89
Grazie per la risposta!
ma perche non +16?

apatriarca
Ti faccio un esempio...

0.1 = 0.00011001b = 0x0019 in virgola fissa a 16bit con 8 bit di parte frazionaria

Con 4 bit di parte frazionaria la migliore approssimazione è 0.0010b = 0x0002

Testando la formula si ottiene (0x0019 + 0x0008) >> 4 = 0x0021 >> 4 = 0x0002

Il +8 serve per passare alla cifra successiva (nei 4 bit superiori) quando c'è un 1 nel 5° bit della parte frazionaria. Se si mettesse +16 si otterrebbe sempre una approssimazione per eccesso mentre nel mio caso si ottiene sempre l'approssimazione più vicina (sia essa per eccesso o per difetto).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.