MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / try_alp_encode

Function try_alp_encode

nodedb-codec/src/alp.rs:291–313  ·  view source on GitHub ↗
(value: f64, factor: f64, decode_exp: u8, mode: DecodeMode)

Source from the content-addressed store, hash-verified

289/// Returns `Some(i64)` if the value round-trips exactly, `None` otherwise.
290#[inline]
291fn try_alp_encode(value: f64, factor: f64, decode_exp: u8, mode: DecodeMode) -> Option<i64> {
292 if !value.is_finite() {
293 return None;
294 }
295
296 let scaled = value * factor;
297 if scaled < i64::MIN as f64 || scaled > i64::MAX as f64 {
298 return None;
299 }
300
301 let encoded = scaled.round() as i64;
302
303 let decoded = match mode {
304 DecodeMode::MultiplyInverse => encoded as f64 * INV_POW10[decode_exp as usize],
305 DecodeMode::DivideByFactor => encoded as f64 / POW10[decode_exp as usize],
306 };
307
308 if decoded.to_bits() == value.to_bits() {
309 Some(encoded)
310 } else {
311 None
312 }
313}
314
315/// Reconstruct a single f64 from an ALP-encoded integer.
316#[inline]

Callers 3

encodeFunction · 0.85
alp_encodabilityFunction · 0.85
find_best_paramsFunction · 0.85

Calls 1

roundMethod · 0.80

Tested by

no test coverage detected