#[cfg(feature = "images")]
#[inline(always)]
pub(crate) fn round_f32(x: f32) -> f32 {
#[cfg(feature = "std")]
{
x.round()
}
#[cfg(not(feature = "std"))]
{
if x >= 0.0 {
floor_f32(x + 0.5)
} else {
-floor_f32(-x + 0.5)
}
}
}
#[cfg(all(feature = "images", not(feature = "std")))]
#[inline(always)]
fn floor_f32(x: f32) -> f32 {
let xi = x as i32;
let xf = xi as f32;
if x < xf { xf - 1.0 } else { xf }
}
#[inline(always)]
pub(crate) fn trunc_f64(x: f64) -> f64 {
#[cfg(feature = "std")]
{
x.trunc()
}
#[cfg(not(feature = "std"))]
{
x as i64 as f64
}
}
#[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
}
}