fastnum 0.7.4

Fast decimal numbers library
Documentation
use crate::bint::intrinsics::{MAX_POWER_10, _U128};

impl _U128 {
    pub(super) const POWERS_10: [_U128; MAX_POWER_10 as usize + 1] = make_power_10();
    pub(super) const MAX_REDUCED_BY_POWERS_10: [_U128; MAX_POWER_10 as usize + 1] =
        make_max_reduced_by_powers_10();
}

const fn make_power_10() -> [_U128; MAX_POWER_10 as usize + 1] {
    let mut result = [_U128::ZERO; MAX_POWER_10 as usize + 1];
    let mut i = 0;
    while i <= MAX_POWER_10 as usize {
        result[i] = from_u128(POWERS_10[i]);
        i += 1;
    }

    result
}

const fn make_max_reduced_by_powers_10() -> [_U128; MAX_POWER_10 as usize + 1] {
    let mut result = [_U128::ZERO; MAX_POWER_10 as usize + 1];
    let mut i = 0;

    while i <= MAX_POWER_10 as usize {
        result[i] = from_u128(u128::MAX / POWERS_10[i]);
        i += 1;
    }

    result
}

#[inline(always)]
const fn from_u128(v: u128) -> _U128 {
    _U128 {
        low: (v & 0x0000_0000_0000_0000_FFFF_FFFF_FFFF_FFFF) as u64,
        high: (v >> 64) as u64,
    }
}

const POWERS_10: [u128; MAX_POWER_10 as usize + 1] = [
    1,
    10,
    100,
    1000,
    10000,
    100000,
    1000000,
    10000000,
    100000000,
    1000000000,
    10000000000,
    100000000000,
    1000000000000,
    10000000000000,
    100000000000000,
    1000000000000000,
    10000000000000000,
    100000000000000000,
    1000000000000000000,
    10000000000000000000,
    100000000000000000000,
    1000000000000000000000,
    10000000000000000000000,
    100000000000000000000000,
    1000000000000000000000000,
    10000000000000000000000000,
    100000000000000000000000000,
    1000000000000000000000000000,
    10000000000000000000000000000,
    100000000000000000000000000000,
    1000000000000000000000000000000,
    10000000000000000000000000000000,
    100000000000000000000000000000000,
    1000000000000000000000000000000000,
    10000000000000000000000000000000000,
    100000000000000000000000000000000000,
    1000000000000000000000000000000000000,
    10000000000000000000000000000000000000,
    100000000000000000000000000000000000000,
];