我正在查看 https://www.codeabbey.com/index/task_view/adaptive-arithmetic-coding
上的算术编码实现我的理解是,当您使用浮点精度时,压缩结果将是一些浮点值。但是,当使用整数和移位的无限精度时,我认为输出是二进制值。在上面的链接中,有一个函数
def remove_first_digit(v): # returns truncated value and digit which was truncated
d = v // tail
v %= tail
return v, d
和
d
附加到output
,这是压缩结果。然而d
这里是一个char
。我不太明白这个实现是如何工作的。为什么这里会发生向 char 的转换?
这里
d
不是“char”。它是一个以 27 为基数的数字,即 0..26 范围内的整数。 code_to_char()
然后将数字转换为大写字母或句点以写出。
这不是产生二进制输出的算术编码器。它是一个算术编码器,可生成由这 27 个字符组成的输出。
发生的情况是,
low
和high
值的高位数字相等,因此该数字被写出,然后从low
和high
值中删除。然后新的数字被移入 low
和 high
- 0 位数字移入 low
,26 位数字移入 high
。