Все перечисленные вами кодеры ориентированы на байты и отбрасываются несколькими свойствами типа double. С одной стороны, существует схема, в которой 12-разрядный показатель / знак не очень хорошо сочетается с границами байтов, а с другой - шумность вашего ввода. С первой частью легко разбираться множеством способов, вторая ограничит эффективность любого сжатия без потерь, которое вы к нему добавляете. Я думаю, что даже лучший результат будет менее чем удивительным, я не знаю ваших данных, но я подозреваю, что вы можете рассчитывать лишь на 25% экономии, более или менее.
Сверху моей головы, и, возможно, бесполезно, потому что вы подумали обо всем в этом списке ...
Обрабатывать поток как 64-битные целые и дельта-кодировать смежные значения. Если у вас есть серии значений с одним и тем же показателем, он фактически обнулит их, а также, возможно, некоторые старшие биты мантиссы. Будут переполнения, но данные по-прежнему нуждаются только в 64 битах, и операция может быть восстановлена.
На этом этапе вы можете при желании попробовать грубое целочисленное предсказание и сохранить различия.
Если вы следовали предложению ранее, у вас будет почти половина значений, начиная с 000 ... и почти половина с FFF ... Чтобы устранить это, поверните значение влево (ROL) на 1 бит и XOR со всеми Fs, если текущий LSB равен 1. Реверс XOR с Fs, если LSB равен 0, тогда ROR.
С другой стороны, просто XOR-предсказания к истинным значениям могут быть лучше, чем разница, потому что тогда вам не нужно делать шаг 3.
Вы можете попробовать переупорядочить байты, чтобы сгруппировать байты с одинаковым значением. Мол, сначала все самые значимые байты и так далее. По крайней мере, вы должны сначала получить что-то вроде массива нулей с максимум несколькими битами шума.
Запускать через обычный компрессор или даже сначала RLE на серии нулей, затем энтропийный энкодер, как Хаффман, или лучше, энкодер диапазона от 7zip / LZMA.
Есть одна хорошая вещь в ваших данных, она однообразна. В ваших данных есть что-то плохое: набор слишком мал. Сколько вы хотите сэкономить, простые килобайты? зачем? Эффективность сжатия сильно пострадает, если между смежными значениями часто существует экспоненциальная разница.
Если вы обрабатываете большое количество этих наборов данных, вам следует рассмотреть возможность использования их сходства для лучшего их сжатия - возможно, чередовать их на некотором этапе. Если вы можете жить с некоторыми потерями, обнуление некоторых младших байтов может быть хорошей идеей - возможно, как для исходных данных, так и для прогнозирования, чтобы вы не вносили туда шум.