您列出的所有编码器都是面向字节的,并且被一些双精度属性所抛弃。一方面是 12 位指数/符号在字节边界上不能很好地发挥作用的布局,另一方面是输入的噪音。第一部分很容易以多种方式处理,第二部分将限制您对其进行的任何无损压缩的有效性。我认为即使是最好的结果也不会令人惊讶,我不知道您的数据,但我怀疑您可以指望仅节省 25%,或多或少。
从我的脑海中,也许没用,因为你已经想到了这个列表上的所有内容......
将流视为 64 位整数并对相邻值进行增量编码。如果您有一系列具有相同指数的值,它将有效地将其归零,并且可能还有一些高尾数位。会有溢出,但数据仍然只需要 64 位,操作可以反转。
在这个阶段,您可以选择尝试一些粗略的整数预测,并保存差异。
如果您之前遵循了该建议,您将有几乎一半的值以 000 开头...而几乎一半的值以 FFF... 为消除这种情况,将值向左 (ROL) 旋转 1 位并将其与所有 F 进行异或如果当前 LSB 为 1。如果 LSB 为 0,则反向是与 Fs 的 XOR。
再想一想,简单地将预测与真实值进行异或比差异更好,因为那时您不必执行第 3 步。
您可以尝试重新排序字节以将具有相同重要性的字节组合在一起。比如,首先是所有最重要的字节,依此类推。最起码你应该得到类似大量零的东西,首先最多只有几位噪音。
运行一个通用压缩器,甚至是第一个零运行的 RLE,然后是一个熵编码器,比如霍夫曼,或者更好的,来自 7zip/LZMA 的范围编码器。
您的数据有一个好处,那就是单调。您的数据有一个不好的地方:它的集合太小了。你想节省多少,仅仅是千字节?做什么的?如果相邻值之间经常存在指数差异,则压缩效果将受到很大影响。
如果您正在处理大量这些数据集,您应该考虑使用它们的相似性来更好地将它们压缩在一起——也许在某个阶段将它们交错。如果您可以忍受一些损失,那么将一些最不重要的字节归零可能是一个好主意-也许在源数据和预测方面都如此,这样您就不会在那里重新引入噪音。