#![allow(dead_code)]
#![allow(clippy::disallowed_methods)]
#[cfg(not(feature = "libm"))]
mod std_ops {
#[inline(always)]
pub fn powf(x: f32, y: f32) -> f32 {
f32::powf(x, y)
}
#[inline(always)]
pub fn exp(x: f32) -> f32 {
f32::exp(x)
}
#[inline(always)]
pub fn exp2(x: f32) -> f32 {
f32::exp2(x)
}
#[inline(always)]
pub fn ln(x: f32) -> f32 {
f32::ln(x)
}
#[inline(always)]
pub fn log2(x: f32) -> f32 {
f32::log2(x)
}
#[inline(always)]
pub fn log10(x: f32) -> f32 {
f32::log10(x)
}
#[inline(always)]
pub fn cbrt(x: f32) -> f32 {
f32::cbrt(x)
}
#[inline(always)]
pub fn hypot(x: f32, y: f32) -> f32 {
f32::hypot(x, y)
}
#[inline(always)]
pub fn sin(x: f32) -> f32 {
f32::sin(x)
}
#[inline(always)]
pub fn cos(x: f32) -> f32 {
f32::cos(x)
}
#[inline(always)]
pub fn tan(x: f32) -> f32 {
f32::tan(x)
}
#[inline(always)]
pub fn asin(x: f32) -> f32 {
f32::asin(x)
}
#[inline(always)]
pub fn acos(x: f32) -> f32 {
f32::acos(x)
}
#[inline(always)]
pub fn atan(x: f32) -> f32 {
f32::atan(x)
}
#[inline(always)]
pub fn atan2(x: f32, y: f32) -> f32 {
f32::atan2(x, y)
}
#[inline(always)]
pub fn sin_cos(x: f32) -> (f32, f32) {
f32::sin_cos(x)
}
#[inline(always)]
pub fn exp_m1(x: f32) -> f32 {
f32::exp_m1(x)
}
#[inline(always)]
pub fn ln_1p(x: f32) -> f32 {
f32::ln_1p(x)
}
#[inline(always)]
pub fn sinh(x: f32) -> f32 {
f32::sinh(x)
}
#[inline(always)]
pub fn cosh(x: f32) -> f32 {
f32::cosh(x)
}
#[inline(always)]
pub fn tanh(x: f32) -> f32 {
f32::tanh(x)
}
#[inline(always)]
pub fn asinh(x: f32) -> f32 {
f32::asinh(x)
}
#[inline(always)]
pub fn acosh(x: f32) -> f32 {
f32::acosh(x)
}
#[inline(always)]
pub fn atanh(x: f32) -> f32 {
f32::atanh(x)
}
}
#[cfg(feature = "libm")]
mod libm_ops {
#[inline(always)]
pub fn powf(x: f32, y: f32) -> f32 {
libm::powf(x, y)
}
#[inline(always)]
pub fn exp(x: f32) -> f32 {
libm::expf(x)
}
#[inline(always)]
pub fn exp2(x: f32) -> f32 {
libm::exp2f(x)
}
#[inline(always)]
pub fn ln(x: f32) -> f32 {
libm::logf(x)
}
#[inline(always)]
pub fn log2(x: f32) -> f32 {
libm::log2f(x)
}
#[inline(always)]
pub fn log10(x: f32) -> f32 {
libm::log10f(x)
}
#[inline(always)]
pub fn cbrt(x: f32) -> f32 {
libm::cbrtf(x)
}
#[inline(always)]
pub fn hypot(x: f32, y: f32) -> f32 {
libm::hypotf(x, y)
}
#[inline(always)]
pub fn sin(x: f32) -> f32 {
libm::sinf(x)
}
#[inline(always)]
pub fn cos(x: f32) -> f32 {
libm::cosf(x)
}
#[inline(always)]
pub fn tan(x: f32) -> f32 {
libm::tanf(x)
}
#[inline(always)]
pub fn asin(x: f32) -> f32 {
libm::asinf(x)
}
#[inline(always)]
pub fn acos(x: f32) -> f32 {
libm::acosf(x)
}
#[inline(always)]
pub fn atan(x: f32) -> f32 {
libm::atanf(x)
}
#[inline(always)]
pub fn atan2(x: f32, y: f32) -> f32 {
libm::atan2f(x, y)
}
#[inline(always)]
pub fn sin_cos(x: f32) -> (f32, f32) {
libm::sincosf(x)
}
#[inline(always)]
pub fn exp_m1(x: f32) -> f32 {
libm::expm1f(x)
}
#[inline(always)]
pub fn ln_1p(x: f32) -> f32 {
libm::log1pf(x)
}
#[inline(always)]
pub fn sinh(x: f32) -> f32 {
libm::sinhf(x)
}
#[inline(always)]
pub fn cosh(x: f32) -> f32 {
libm::coshf(x)
}
#[inline(always)]
pub fn tanh(x: f32) -> f32 {
libm::tanhf(x)
}
#[inline(always)]
pub fn asinh(x: f32) -> f32 {
libm::asinhf(x)
}
#[inline(always)]
pub fn acosh(x: f32) -> f32 {
libm::acoshf(x)
}
#[inline(always)]
pub fn atanh(x: f32) -> f32 {
libm::atanhf(x)
}
}
#[cfg(feature = "libm")]
pub use libm_ops::*;
#[cfg(not(feature = "libm"))]
pub use std_ops::*;
pub trait FloatPow {
fn squared(self) -> Self;
fn cubed(self) -> Self;
}
impl FloatPow for f32 {
#[inline]
fn squared(self) -> Self {
self * self
}
#[inline]
fn cubed(self) -> Self {
self * self * self
}
}