// Note that these polyfills can be very imprecise, but hopefully good enough
// for the vast majority of cases.
#[inline(always)]
pub(crate) fn powi_f64(x: f64, n: u32) -> f64 {
#[cfg(feature = "std")]
{
x.powi(n as i32)
}
#[cfg(not(feature = "std"))]
{
let mut result = 1.0;
let mut base = x;
let mut exp = n;
while exp > 0 {
if exp & 1 == 1 {
result *= base;
}
base *= base;
exp >>= 1;
}
result
}
}