fastnum 0.7.4

Fast decimal numbers library
Documentation
use crate::bint::intrinsics::{_div_rem_64, DIGIT_POWERS_10};

#[inline(always)]
pub const fn _ilog10_64(n: u64) -> u32 {
    let res = ((n.ilog2() + 1) * 1233) >> 12;
    if n < DIGIT_POWERS_10[res as usize] {
        res.saturating_sub(1)
    } else {
        res
    }
}

#[inline(always)]
pub const fn _downscale_64(mut n: u64) -> (u64, u32) {
    let mut upscaled = 0;

    while n >= 10 {
        let (q, r) = _div_rem_64(n, 10);

        if r != 0 {
            break;
        }

        n = q;
        upscaled += 1;
    }

    (n, upscaled)
}