Encoding CABAC编码-十进制到二进制

Encoding CABAC编码-十进制到二进制,encoding,floating-point,binary,Encoding,Floating Point,Binary,在这个网站上有一个很好的例子展示了算术编码是如何工作的。有一件事让我感到困扰,那就是: 0.647705 已转换为以下内容: 0.101001011101 很明显,它不是“典型的”十进制到二进制的数字转换 0.647705 • 2 = 1 + 0.295410. 0.295410 • 2 = 0 + 0.590820. 0.590820 • 2 = 1 + 0.181640. 0.181640 • 2 = 0 + 0.363280. 0.363280 • 2 = 0 + 0.726560. 0.

在这个网站上有一个很好的例子展示了算术编码是如何工作的。有一件事让我感到困扰,那就是:

0.647705

已转换为以下内容:

0.101001011101

很明显,它不是“典型的”十进制到二进制的数字转换

0.647705 • 2 = 1 + 0.295410. 0.295410 • 2 = 0 + 0.590820. 0.590820 • 2 = 1 + 0.181640. 0.181640 • 2 = 0 + 0.363280. 0.363280 • 2 = 0 + 0.726560. 0.726560 • 2 = 1 + 0.453120. 0.453120 • 2 = 0 + 0.906240. 0.906240 • 2 = 1 + 0.812480. 0.812480 • 2 = 1 + 0.624960. 0.624960 • 2 = 1 + 0.249920. 0.249920 • 2 = 0 + 0.499840. 0.499840 • 2 = 0 + 0.999680. 0.647705 • 2 = 1 + 0.295410. 0.295410 • 2 = 0 + 0.590820. 0.590820 • 2 = 1 + 0.181640. 0.181640 • 2 = 0 + 0.363280. 0.363280 • 2 = 0 + 0.726560. 0.726560 • 2 = 1 + 0.453120. 0.453120 • 2 = 0 + 0.906240. 0.906240 • 2 = 1 + 0.812480. 0.812480 • 2 = 1 + 0.624960. 0.624960 • 2 = 1 + 0.249920. 0.249920 • 2 = 0 + 0.499840. 0.499840 • 2 = 0 + 0.999680.
产生的位序列是1 0 1 0 1 0 1 1 0 0。然后,由于我们在最后一位停止,我们看到余数,.999680大于½,所以我们将最后一位从0四舍五入到1。结果是.1010010111101。

非常感谢!还有一个问题。我们如何知道何时应该停止这个过程?我们怎么知道我们产生的位数足够好呢?从,它不是把十进制转换成二进制。相反,它是按照其算法生成二进制的,当比特足以对消息进行编码时,特别是当编码值在表示最后一个符号的必要范围内时,它就会停止。这篇文章更多的是描述而不是算法;要把它变成一个合适的算法需要付出努力(或阅读其他文档)。