use crate::int::types::Int;
use crate::support::rounding::RoundingMode;
#[inline]
pub(crate) fn log_ln_divide_d18<const SCALE: u32>(
raw: Int<1>,
base_raw: Int<1>,
mode: RoundingMode,
) -> Int<1> {
let wide: crate::D<Int<2>, SCALE> = crate::D::<Int<1>, SCALE>(raw).into();
let wbase: crate::D<Int<2>, SCALE> = crate::D::<Int<1>, SCALE>(base_raw).into();
let result: crate::D<Int<1>, SCALE> =
::core::convert::TryInto::try_into(wide.log_strict_with(wbase, mode)).unwrap_or_else(|_| {
crate::support::diagnostics::overflow_panic_with_scale("D18::log", SCALE)
});
result.0
}
#[inline]
pub(crate) fn log_ln_divide_d18_approx<const SCALE: u32>(
raw: Int<1>,
base_raw: Int<1>,
working_digits: u32,
mode: RoundingMode,
) -> Int<1> {
let wide: crate::D<Int<2>, SCALE> = crate::D::<Int<1>, SCALE>(raw).into();
let wbase: crate::D<Int<2>, SCALE> = crate::D::<Int<1>, SCALE>(base_raw).into();
let result: crate::D<Int<1>, SCALE> =
::core::convert::TryInto::try_into(wide.log_approx_with(wbase, working_digits, mode))
.unwrap_or_else(|_| {
crate::support::diagnostics::overflow_panic_with_scale("D18::log", SCALE)
});
result.0
}
#[inline]
pub(crate) fn log_ln_divide_d38<const SCALE: u32>(
raw: Int<2>,
base_raw: Int<2>,
mode: RoundingMode,
) -> Option<Int<2>> {
crate::algos::ln::ln_series_2limb::log_strict::<SCALE>(raw, base_raw, mode)
}
#[inline]
pub(crate) fn log_ln_divide_d38_approx<const SCALE: u32>(
raw: Int<2>,
base_raw: Int<2>,
working_digits: u32,
mode: RoundingMode,
) -> Option<Int<2>> {
crate::algos::ln::ln_series_2limb::log_with(raw, base_raw, SCALE, working_digits, mode)
}