#[cfg_attr(feature = "no-panic", inline)]
pub const fn decimal_length9(v: u32) -> u32 {
debug_assert!(v < 1000000000);
if v >= 100000000 {
9
} else if v >= 10000000 {
8
} else if v >= 1000000 {
7
} else if v >= 100000 {
6
} else if v >= 10000 {
5
} else if v >= 1000 {
4
} else if v >= 100 {
3
} else if v >= 10 {
2
} else {
1
}
}
#[cfg_attr(feature = "no-panic", inline)]
#[allow(dead_code)]
pub fn log2_pow5(e: i32) -> i32 {
debug_assert!(e >= 0);
debug_assert!(e <= 3528);
((e as u32 * 1217359) >> 19) as i32
}
#[cfg_attr(feature = "no-panic", inline)]
pub const fn pow5bits(e: i32) -> i32 {
debug_assert!(e >= 0);
debug_assert!(e <= 3528);
(((e as u32 * 1217359) >> 19) + 1) as i32
}
#[cfg_attr(feature = "no-panic", inline)]
#[allow(dead_code)]
pub fn ceil_log2_pow5(e: i32) -> i32 {
log2_pow5(e) + 1
}
#[cfg_attr(feature = "no-panic", inline)]
pub const fn log10_pow2(e: i32) -> u32 {
debug_assert!(e >= 0);
debug_assert!(e <= 1650);
(e as u32 * 78913) >> 18
}
#[cfg_attr(feature = "no-panic", inline)]
pub const fn log10_pow5(e: i32) -> u32 {
debug_assert!(e >= 0);
debug_assert!(e <= 2620);
(e as u32 * 732923) >> 20
}
pub(crate) mod const_array {
pub(crate) struct ConstArray<T>(pub T);
impl<T, const N: usize> ConstArray<[T; N]> {
pub(crate) const fn len(&self) -> usize {
self.0.len()
}
pub(crate) const unsafe fn get_unchecked(&self, i: usize) -> &T {
debug_assert!(i < self.0.len());
unsafe {
::core::hint::assert_unchecked(i < self.0.len());
&self.0[i]
}
}
}
}