【发布时间】:2017-04-21 22:22:22
【问题描述】:
我正在寻找一种表示值范围的方法: 0 - 18446744073709551615 使用少于 8 个字节。
我试图想一些方法可以做到,但没有任何效果。 理论上,例如: 使用单个字节来表示至少 2 个字节的位序列。 但是,2 个字节有 65536 种不同的位组合,而单个字节只给了我们 0-255 的取值范围(256 种组合)。
最好的方法可能是改变位的含义。这很好,但不会有任何精度损失。
我开始认为这根本不可能,尽管我想获得其他人关于该主题的意见和理论。
有两条规则: #1 不能有任何精度损失(即所有数字 0 - 18446744073709551615 必须是可表示的)。 #2 从标准 64 位格式转换后,需要的字节数永远不会超过 7 个字节(56 位)。
这些规则使这变得特别困难。
【问题讨论】:
-
如果所有 2^64 数字都必须是可表示的,那么你就完成了。 63位只能代表其中的一半。如果将所有 63 位压缩值解压缩,最多将得到 64 位值的一半。简单计数。 56 位只能表示数字的 1/256。你需要64位。期间。
标签: c++ assembly binary compression number-theory