An open API service indexing awesome lists of open source software.

https://github.com/xermicus/floatpack

Lossless Compression for precission floats
https://github.com/xermicus/floatpack

Last synced: 8 months ago
JSON representation

Lossless Compression for precission floats

Awesome Lists containing this project

README

          

# floatpack
Bitpacking with SIMD for `Decimal` from the `rust_decimal` crate.

# In a nutshell
The algorithm:
1. Each `Decimal` value is serialized into its components (= 4 x `u32`)
2. The resulting 4 component streams are individually compressed by storing their cumulative difference (XOR)
3. The 4 compressed component streams are then bit-packed

The idea is that this should get good compression rates with little computational complexity, especially for contiguous data. In timeseries data, usually:
* one datapoint only differs slightly from the next one in the series and
* you have a lot of datapoints

This represents a highly specific use-case. If you are not dealing with timeseries data other compression algorithms are probably more suitable.

# Usage example
``` rust
use floatpack::{pack, unpack};
use rust_decimal_macros::*;

let values = vec![dec!(1.0), dec!(2.0), dec!(3.0)];
assert_eq!(values, unpack(&pack(&values[..])));
```