2011-10-21 10 views
6

necesito para codificar un BigDecimal de forma compacta en un ByteBuffer para sustituir a mi actual esquema (basura) que codifica (escribir el BigDecimal como una codificación UTF-8 String precedido de un byte que indica la longitud String).BigDecimal escala óptima para la codificación

Dado que BigDecimal es efectivamente un valor entero (en el sentido matemático) y una escala asociada, estoy planeando escribir la escala como un solo byte seguido de un número VLQ encoded. Esto debería cubrir adecuadamente el rango de valores esperados (es decir, la escala máxima 127).

Mi pregunta: Cuando encuentre valores grandes como 10,000,000,000 es claramente óptimo codificar esto como el valor: 1 con una escala de -10 en lugar de codificar el entero 10,000,000,000 con una escala de 0 (que ocupará más bytes) . ¿Cómo puedo determinar la escala óptima para un BigDecimal dado? ... En otras palabras, ¿cómo puedo determinar la escala mínima posible que establezco asignar un BigDecimal sin tener que realizar ningún redondeo?

Por favor, no hacer referencia al término "optimización prematura" en sus respuestas :-)

+0

No lo haré, porque lo llamo Premature Optimi * z * ation :-) –

+3

Bueno, al menos no ha editado mi búsqueda. – Adamski

Respuesta