estimator.rs - source
Description: Source of the Rust file `library/core/src/num/flt2dec/estimator.rs`.

#
core/num/flt2dec/
estimator.rs

    1//! The exponent estimator.
    2
    3/// Finds `k_0` such that `10^(k_0-1) < mant * 2^exp <= 10^(k_0+1)`.
    4///
    5/// This is used to approximate `k = ceil(log_10 (mant * 2^exp))`;
    6/// the true `k` is either `k_0` or `k_0+1`.
    7#[doc(hidden)]
    8pub fn estimate_scaling_factor(mant: u64, exp: i16) -> i16 {
    9    // 2^(nbits-1) < mant <= 2^nbits if mant > 0
    10    let nbits = 64 - (mant - 1).leading_zeros() as i64;
    11    // 1292913986 = floor(2^32 * log_10 2)
    12    // therefore this always underestimates (or is exact), but not much.
    13    (((nbits + exp as i64) * 1292913986) >> 32) as i16
    14}