#![cfg(feature = "power-of-two")]
#![cfg(not(feature = "compact"))]
#![doc(hidden)]
use lexical_util::num::Float;
#[cfg(not(feature = "radix"))]
use crate::table_decimal::*;
#[inline(always)]
#[cfg(not(feature = "radix"))]
pub const fn get_small_int_power(exponent: usize, radix: u32) -> u64 {
match radix {
2 => get_small_int_power2(exponent),
4 => get_small_int_power4(exponent),
5 => get_small_int_power5(exponent),
8 => get_small_int_power8(exponent),
10 => get_small_int_power10(exponent),
16 => get_small_int_power16(exponent),
32 => get_small_int_power32(exponent),
_ => unreachable!(),
}
}
#[inline(always)]
#[cfg(not(feature = "radix"))]
pub fn get_small_f32_power(exponent: usize, radix: u32) -> f32 {
match radix {
2 => get_small_f32_power2(exponent),
4 => get_small_f32_power4(exponent),
8 => get_small_f32_power8(exponent),
10 => get_small_f32_power10(exponent),
16 => get_small_f32_power16(exponent),
32 => get_small_f32_power32(exponent),
_ => unreachable!(),
}
}
#[inline(always)]
#[cfg(not(feature = "radix"))]
pub fn get_small_f64_power(exponent: usize, radix: u32) -> f64 {
match radix {
2 => get_small_f64_power2(exponent),
4 => get_small_f64_power4(exponent),
8 => get_small_f64_power8(exponent),
10 => get_small_f64_power10(exponent),
16 => get_small_f64_power16(exponent),
32 => get_small_f64_power32(exponent),
_ => unreachable!(),
}
}
#[inline(always)]
pub const fn get_small_int_power2(exponent: usize) -> u64 {
1 << exponent
}
#[inline(always)]
pub fn get_small_f32_power2(exponent: usize) -> f32 {
debug_assert!(exponent as i32 <= f32::EXPONENT_BIAS - f32::MANTISSA_SIZE);
let shift = (f32::EXPONENT_BIAS - f32::MANTISSA_SIZE) as u32;
let bits = (exponent as u32 + shift) << f32::MANTISSA_SIZE;
f32::from_bits(bits)
}
#[inline(always)]
pub fn get_small_f64_power2(exponent: usize) -> f64 {
debug_assert!(exponent as i32 <= f64::EXPONENT_BIAS - f64::MANTISSA_SIZE);
let shift = (f64::EXPONENT_BIAS - f64::MANTISSA_SIZE) as u64;
let bits = (exponent as u64 + shift) << f64::MANTISSA_SIZE;
f64::from_bits(bits)
}
#[inline(always)]
pub const fn get_small_int_power4(exponent: usize) -> u64 {
get_small_int_power2(2 * exponent)
}
#[inline(always)]
pub fn get_small_f32_power4(exponent: usize) -> f32 {
get_small_f32_power2(2 * exponent)
}
#[inline(always)]
pub fn get_small_f64_power4(exponent: usize) -> f64 {
get_small_f64_power2(2 * exponent)
}
#[inline(always)]
pub const fn get_small_int_power8(exponent: usize) -> u64 {
get_small_int_power2(3 * exponent)
}
#[inline(always)]
pub fn get_small_f32_power8(exponent: usize) -> f32 {
get_small_f32_power2(3 * exponent)
}
#[inline(always)]
pub fn get_small_f64_power8(exponent: usize) -> f64 {
get_small_f64_power2(3 * exponent)
}
#[inline(always)]
pub const fn get_small_int_power16(exponent: usize) -> u64 {
get_small_int_power2(4 * exponent)
}
#[inline(always)]
pub fn get_small_f32_power16(exponent: usize) -> f32 {
get_small_f32_power2(4 * exponent)
}
#[inline(always)]
pub fn get_small_f64_power16(exponent: usize) -> f64 {
get_small_f64_power2(4 * exponent)
}
#[inline(always)]
pub const fn get_small_int_power32(exponent: usize) -> u64 {
get_small_int_power2(5 * exponent)
}
#[inline(always)]
pub fn get_small_f32_power32(exponent: usize) -> f32 {
get_small_f32_power2(5 * exponent)
}
#[inline(always)]
pub fn get_small_f64_power32(exponent: usize) -> f64 {
get_small_f64_power2(5 * exponent)
}