2011-10-21 12 views
6

devo codificare un BigDecimal compatto in un ByteBuffer per sostituire il mio attuale regime (pessima) codifica (scrivendo il BigDecimal come UTF-8 codificati String prefisso un byte che indica la lunghezza String).BigDecimal scala ottimale per la codifica

Dato che un valore BigDecimal è effettivamente un valore intero (in senso matematico) e una scala associata sto pianificando di scrivere la scala come un singolo byte seguito da un numero intero VLQ encoded. Questo dovrebbe coprire adeguatamente l'intervallo di valori attesi (cioè la scala massima 127).

La mia domanda: quando si incontrano valori elevati come 10.000.000.000 è chiaramente ottimale codificarlo come il valore: 1 con una scala di -10 anziché codificare l'intero 10.000.000.000 con una scala di 0 (che occuperà più byte) . Come posso determinare la scala ottimale per un dato BigDecimal? ... In altre parole, come posso determinare la scala minima possibile che ho impostato per assegnare un BigDecimal senza dover eseguire alcun arrotondamento?

Si prega di non fare riferimento al termine "ottimizzazione prematura" nelle vostre risposte :-)

+0

Non lo farò, perché lo chiamo Premature Optimi * z * ation :-) –

+3

Beh, almeno non hai modificato il mio elenco. – Adamski

risposta