Nell'agosto di due anni fa avevo avanzato la proposta di un formato in virgola mobile a 80 bit "esteso", per soddisfare la richiesta di calcoli in precisione elevatissima (fino a 20 cifre decimali) senza rinunciare alla remota necessità di dover usare esponenti molto grandi in valore assoluto, ben oltre il limite già elevato della doppia precisione. Si tratta di uno standard "dispendioso" in termini di capacità computazionale, a fronte di una utilità che si apprezzerebbe in pochi settori "di nicchia".

 Adesso torno sull'argomento con una proposta simile ma meno pretenziosa e più articolata, focalizzandomi su un utilizzo più "quotidiano" e generale; esso fornisce una precisione meno spinta ma in grado di soddisfare comunque tutte le esigenze più frequenti, con prestazioni eccellenti anche in termini di grandi esponenti. L'idea è sempre quella di utilizzare una lunghezza variabile della mantissa e dell'esponente, prendendo come lunghezze di base i valori di 42 e 10 bit rispettivamente (considerando anche il bit di segno all'interno della mantissa). La precisione è ottimale dato che corrisponde a 12 cifre decimali significative con un ampio margine di precisione. Si tenga presente che l'accuratezza con cui sono note tutte le costanti fisiche fondamentali non va oltre questo livello.

 L'esponente, senza il "trucco" della estensione, sarebbe di per sé già sufficiente a coprire qualsiasi esigenza concreta, motivo per cui questa opzione è comunque inclusa come punto di partenza nella seguente lista. Le altre opzioni vedono una crescita di esponente massimo a scapito di una moderata riduzione della precisione e di una accresciuta complessità di codifica, aspetti da valutare per una eventuale implementazione hardware di tali standard.

  • Opzione A: lunghezza fissa della mantissa e dell'esponente (42+10 bit): precisione numerica di 12,65 cifre decimali con esponente compreso tra -154 e +154 e numeri "de-normalizzati" (standard FPF).
  • Opzione B: la mantissa mantiene una lunghezza di 42 bit fino a quando l'esponente, in valore assoluto, è inferiore a 100. Oltre questa soglia, il bit meno significativo della mantissa viene utilizzato per raddoppiare il numero dei possibili esponenti restanti, per cui alla fine il valore dell'esponente può arrivare a ±208 a scapito di una lieve di riduzione di precisione (sempre 12 cifre significative, ma con margine ridotto a 0,35 decimali). 
  • Opzione C: mantissa di 12 decimali con esponente compreso tra -122 e +122, che scende a 10 decimali (con margine di 0,55) quando si utilizza l'esponente "esteso" fino a ± 4096. La transizione avviene quando l'esponente, in valore assoluto, supera il valore 122; a quel punto alla mantissa vengono sottratti 7 bit che vengono utilizzati per codificare 128 possibili valori, da moltiplicare per ciascuno degli esponenti residui (32 positivi e 32 negativi).
 

 Mentre la prima opzione rispetta rigorosamente lo standard Floating classico, la seconda farà storcere il naso a molti puristi, dal momento che introduce una lieve ma insidiosa riduzione di precisione che potrebbe non essere evidente nei risultati finali di una catena di calcoli. Pertanto, anche se è molto improbabile che esso possa finire per inficiare un risultato, è difficile che un simile standard possa incontrare il favore della comunità di ingegneri, matematici e informatici che si occupano di definire questi standard, tanto più che il vantaggio ricavato sull'esponente massimo risulta limitato. Al contrario, la voluta ridondanza tra le due rappresentazioni nella "opzione C" è volta a "tracciare" la riduzione di precisione di un risultato che possa avere subito la rara transizione al regime con precisione ridotta. Chi cerca un risultato rigoroso a 12 cifre, può a questo punto ignorarne tale risultato, assimilandolo a un "overflow" del sistema. Questo, insieme all'esponente massimo decisamente elevato nell'opzione estesa, potrebbe essere un elemento vincente nell'adozione di tale standard.

 Va sottolineato che la scelta di effettuare la transizione in corrispondenza di un valore dell'esponente pari a 122 è arbitraria, sebbene appaia al sottoscritto il compromesso migliore. Estremizzando, è pensabile innalzare tale punto di transizione fino a 146 (con esponente massimo di ±1024) oppure abbassarlo fino a 100 (esponente massimo di ±6912), ma andando fuori della fascia 115÷135 (ovvero esponente ampliato a 2432÷4992) il vantaggio a mio parere è trascurabile rispetto alle rinunce.

 Per finire, va detto che il sistema qui presentato non è molto diverso da quello definito "COPV" e illustrato dal sottoscritto quasi 3 anni prima. In quella occasione, oltre che al formato 52 bit ad esponente variabile, esso veniva applicato anche a quello 48 bit raggiungendo prestazioni confrontabili con quelle mostrate qui, sebbene con precisione più marginale ed esponente massimo più contenuto ma comunque elevato.

Nota importante aggiunta ad agosto 2023: l'articolo contiene un errore nel calcolo delle combinazioni realmente ottenibile con l'esponente esteso, che sono sottostimate. Si faccia riferimento a questo nuovo articolo.