リストするすべてのエンコーダーはバイト指向であり、double のいくつかのプロパティによってスローされます。1 つは、12 ビットの指数/符号がバイト境界でうまく機能しないレイアウトであり、もう 1 つは入力のノイズです。最初の部分はさまざまな方法で簡単に対処できますが、2 番目の部分は、適用したロスレス圧縮の効果を制限します。あなたのデータはわかりませんが、多かれ少なかれわずか 25% の節約が期待できると思います。
頭のてっぺんから、そしておそらく役に立たないのは、あなたがこのリストのすべてを考えたからです...
ストリームを 64 ビット整数として扱い、隣接する値をデルタ エンコードします。同じ指数を持つ一連の値がある場合、それは事実上それをゼロにし、おそらくいくつかの上位仮数ビットもゼロにします。オーバーフローが発生しますが、データはまだ 64 ビットしか必要とせず、操作を元に戻すことができます。
この段階で、必要に応じて大雑把な整数予測を試して、差を保存できます。
以前の提案に従った場合、000 で始まる値がほぼ半分になり、FFF で始まる値がほぼ半分になります。現在の LSB が 1 の場合、逆は Fs との XOR で、LSB が 0 の場合は ROR です。
2番目の考えでは、ステップ3を実行する必要がないため、単純に予測を真の値にXORする方が差よりも優れている可能性があります。
バイトを並べ替えて、同じ意味を持つバイトをグループ化することができます。同様に、最初にすべての最上位バイトなど。少なくとも、最初にせいぜい数ビットのノイズを伴う大量のゼロの連続のようなものを取得する必要があります。
一般的なコンプレッサー、またはゼロの実行で最初の RLE を実行し、次に huffman のようなエントロピー エンコーダー、またはより良い、7zip/LZMA のレンジ エンコーダーを実行します。
データには 1 つの良い点があります。それは単調です。データには悪い点があります。それは単にセットが小さすぎるということです。いくらキロバイト節約したいの?何のために?隣接する値の間に指数の違いが頻繁にある場合、圧縮の有効性は大きく損なわれます。
これらのデータセットを大量に処理している場合は、それらの類似性を利用してそれらをより適切に圧縮することを検討する必要があります。おそらく、ある段階でそれらをインターリーブします。多少の損失を許容できる場合は、ソース データと予測の両方で最下位バイトをゼロにすることをお勧めします。これにより、そこにノイズが再導入されなくなります。