Tante volte abbiamo parlato in queste pagine di possibili formati alternativi a quelli tradizionali, sia per esprimere numeri in virgola mobile (FPF) che per codificare efficacemente numeri interi, per imaging ad alta dinamica (HDR). Dopo tante riflessioni, mi sono reso conto che è possibile sintetizzare queste proposte offrendo pochi standard ottimizzati che possono davvero far fronte a ogni esigenza o quasi, a patto però di staccarsi dal dogma riguardante la lunghezza delle parole usate.

 Fino ad oggi, gli informatici hanno sempre insistito sull'utilizzo di potenze di 2 nella scelta della lunghezza delle sequenze di bit che descrivono qualsiasi informazione. La lunghezza di 8 bit è usata, tra l'altro, nel codice ASCII per codificare i caratteri (poi divenuti 16 bit con Unicode) e, fino a non molto tempo fa, anche per codificare la luminosità di ciascun pixel per ogni colore delle immagini RGB,. 16 bit vengono usati nel codificare le forme d'onda nell'audio digitale (sistema PCM nei CD), mentre i formati interi e in virgola mobile IEEE sono a 16, 32, 64 e 128 bit. L'uso di potenze di due presenta certamente dei vantaggi, ma si rivela spesso un vincolo molto restrittivo volendo adattare questi standard nella vita reale, come ho già messo in evidenza a più riprese. La questione è poi aggravata dal fatto che, spesso, questi standard non sono nemmeno ottimizzati e si ha un autentico "spreco" di bit con delle marginalità che, a posteriori, si potevano evitare ma che, evidentemente, al momento della loro ideazione apparivano secondarie.

 Nell'immagine di apertura vediamo due tabelle che sintetizzano, in alto, le caratteristiche dei quattro principali standard FPF esistenti e, in basso, i tre standard che potrebbero rimpiazzarli, essendo molto più "ragionevoli" e ottimizzati per i diversi campi di applicazione (si veda al riguardo il contenuto dell'ultima colonna). Come si vede, i nuovi formati rispettano comunque una progressione geometrica, raddoppiando ogni volta la lunghezza ma partendo da 20 bit, invece di 16.

 In realtà, si potrebbe partire da 10 bit se, a questi tre formati floating, aggiungiamo anche un formato intero a 10 bit codificato tramite "Look-Up Table ottimizzata". Come descritto in dettaglio in questo articolo, infatti, una accurata scelta dei parametri Dmax e Alfa (rispettivamente 0.755% e 0,078) permetterebbe di codificare numeri interi a 16 bit usando solo 10 bit e commettendo un errore di precisione inferiore allo 0,78% (esclusi naturalmente i primi 128 livelli quantizzati). Tale codifica è illustrata nel grafico e nella tabella seguenti.

LUT 10 16

Codifica LUT 10-16 ideata dal sottoscritto; in blu i valori codificati (scala a sinistra) in rosso e verde gli incrementi quantizzati (in termini assoluti e percentuali, scala a destra). In basso, un estratto della tabella di conversione corrispondente, con indicazione degli incrementi assoluti e relativi; il colore sullo sfondo cambia in base all'entità dell'incremento. - Copyright: Marco Di Lorenzo

LUT 10 16 table