#[inline]
pub fn value_to_key(value: f64, inv_gamma_ln: f64) -> i64 {
if value == 0.0 {
return 0;
}
let log_gamma = value.abs().ln() * inv_gamma_ln;
log_gamma.ceil() as i64
}
#[inline]
pub fn key_to_value(key: i64, gamma: f64, gamma_ln: f64) -> f64 {
let key_f64 = key as f64;
(key_f64 * gamma_ln).exp() * (2.0 / (1.0 + gamma))
}
#[inline]
pub fn value_to_key_i32(value: f64, inv_gamma_ln: f64) -> i32 {
value_to_key(value, inv_gamma_ln) as i32
}
#[inline]
pub fn key_to_value_i32(key: i32, gamma: f64, gamma_ln: f64) -> f64 {
key_to_value(key as i64, gamma, gamma_ln)
}