[C] Conversione di codice binario a virgola fissa
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?
Se si, come potrei minimizzare l,errore senza dover ricorrere alla decodifica?
Risposte
È 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
Grazie per la risposta!
ma perche non +16?
ma perche non +16?
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).
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).