const DENOMINATOR: i64 = 1_000_000_000;
const LN_OF_2_SCALE_9: I64Decimal9 = 693147180; const LN_OF_10_SCALE_9: I64Decimal9 = 2302585093; const LOG2_OF_10_SCALE_9: I64Decimal9 = 3321928095;
pub type I64Decimal9 = i64;
pub fn ln_polynomial(x: I64Decimal9) -> I64Decimal9 {
debug_assert!(x >= DENOMINATOR);
debug_assert!(x <= 2 * DENOMINATOR);
let mut result: i64 = -56570851; result *= x;
result /= DENOMINATOR;
result += 447179550; result *= x;
result /= DENOMINATOR;
result += -1469956800; result *= x;
result /= DENOMINATOR;
result += 2821202600; result *= x;
result /= DENOMINATOR;
result += -1741793900;
result
}
pub fn log2_polynomial(x: I64Decimal9) -> I64Decimal9 {
debug_assert!(x >= DENOMINATOR);
debug_assert!(x <= 2 * DENOMINATOR);
let mut result: i64 = -81614486; result *= x;
result /= DENOMINATOR;
result += 645143719; result *= x;
result /= DENOMINATOR;
result += -2120699387; result *= x;
result /= DENOMINATOR;
result += 4070135003; result *= x;
result /= DENOMINATOR;
result += -2512877423;
result
}
pub fn ln_add_bit_log2(result: &mut I64Decimal9, bit_log2: u32) {
*result += bit_log2 as i64 * LN_OF_2_SCALE_9;
}
pub fn log2_add_bit_log2(result: &mut I64Decimal9, bit_log2: u32) {
*result += bit_log2 as i64 * DENOMINATOR;
}
pub fn ln_sub_decimals(result: &mut I64Decimal9, num_decimals: usize) {
*result -= num_decimals as i64 * LN_OF_10_SCALE_9;
}
pub fn log2_sub_decimals(result: &mut I64Decimal9, num_decimals: usize) {
*result -= num_decimals as i64 * LOG2_OF_10_SCALE_9;
}