Codificación aritmética

Por ejemplo, la secuencia "ABBCAB" podría convertirse en 0.0112013 (en la codificación aritmética los números están entre 0 y 1).

El paso siguiente es codificar este número ternario usando un número binario de punto fijo con la suficiente precisión para recuperarlo, tal como 0.00101100102 —esto es sólo 10 bits; 2 bits son salvados en comparación con la codificación por bloque—.

Esto es factible para secuencias largas porque hay algoritmos eficientes para convertir la base de números precisos arbitrariamente.

En general, cada paso del proceso de codificación, excepto por el último, es el mismo; el codificador tiene básicamente sólo tres piezas de datos a considerar: El codificador divide el intervalo actual en sub-intervalos, cada uno representando una fracción del actual intervalo proporcional a la probabilidad de ese símbolo en el contexto actual.

Considere el proceso para decodificar un mensaje codificado con el modelo de cuatro símbolos dado.

La fracción 0.538 cae dentro del sub-intervalo para NEUTRAL, [0, 0.6); esto indica que el primer símbolo que el codificador debe haber leído ha sido NEUTRAL, entonces este es el primer símbolo del mensaje.

Otra vez divida nuestro intervalo en sub-intervalos: Ahora 0.538 cae dentro del intervalo del símbolo END-OF-DATA; por lo tanto, éste debe ser el siguiente símbolo.

Un ejemplo de codificación aritmética suponiendo una distribución de probabilidad fija de tres símbolos "A", "B" y "C". La probabilidad de "A" es 50%, la probabilidad de "B" es 33% y la probabilidad de "C" es 17%. Además asumimos que la profundidad de recursión es conocida en cada paso.
En el paso uno codificamos "B", el cual está dentro del intervalo [0.5, 0.83): el número binario "0.10 x " es el código más corto que representa un intervalo que está enteramente dentro de [0.5, 0.83). " x " significa una secuencia de bits arbitraria. Hay dos casos extremos: la x más pequeña representa un número infinito de ceros, lo cual representa el lado izquierdo del intervalo representado. Luego el lado izquierdo del intervalo es dec(0.10) = 0.5. La x más grande representa un número infinito de unos lo cual da un número que converge hacia dec(0.11) = 0.75. Por lo tanto, "0.10 x " representa el intervalo [0.5, 0.75) el cual está dentro de [0.5, 0.83).
Ahora podemos dejar la parte "0." puesto que todos los intervalos comienzan con  "0." y podemos ignorar la parte " x " porque no importa que secuencia de bits representa, nos mantenemos dentro de [0.5, 0.75).
Un diagrama mostrando la decodificación de 0.538 (el punto circular) en el modelo de ejemplo. La región es dividida en subregiones proporcionales a las frecuencias de los símbolos, luego la subregión que contiene el punto es sucesivamente subdividida de la misma forma.