有一些特殊的格式(base-128)设计用于传输protobufs和elsewhere中使用的整数。当大多数整数很小时(它们需要一个字节用于最小的数字并且可能浪费一个字节用于其他字节),它们是有利的。浮点数的紧凑格式
我想知道在假定大多数实际上是小整数的情况下,浮点数是否有相似之处?
要由Alice解决了答案:我在想是这样
void putCompressedDouble(double x) {
int n = (int) x;
boolean fits = (n == x);
putBoolean(fits);
if (fits) {
putCompressedInt(n);
} else {
putUncompressedLong(Double.doubleToLongBits(x));
}
}
这个工程(除负零,我真的不关心),但它的浪费在fits == true
的情况下。
我接受你的解决方案,因为它很好,很简单。在我自己的答案中,我给出了结果(可以实现更好的压缩,但它要复杂得多)。 – maaartinus