有一些特殊的格式(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