use crate::cmp::{SimdPartialEq, SimdPartialOrd};
use crate::num::SimdUint;
use crate::simd::SimdScalar;
use core::cmp::{PartialEq, PartialOrd};
use core::ops::{
Add,
AddAssign,
Div,
DivAssign,
Mul,
MulAssign,
Neg,
Rem,
RemAssign,
Sub,
SubAssign,
};
use multitype::Float;
pub trait SimdFloat
where
Self:
crate::num::seal::SimdFloat
+ Copy
+ PartialEq
+ PartialOrd
+ SimdPartialEq
+ SimdPartialOrd
+ Add<Output = Self>
+ Div<Output = Self>
+ Mul<Output = Self>
+ Neg<Output = Self>
+ Rem<Output = Self>
+ Sub<Output = Self>
+ AddAssign
+ DivAssign
+ MulAssign
+ RemAssign
+ SubAssign,
{
type Scalar: SimdScalar + Float;
const LEN: usize;
type Bits: SimdUint;
const EPSILON: Self;
const MIN: Self;
const MIN_POSITIVE: Self;
const MAX: Self;
const INFINITY: Self;
const NEG_INFINITY: Self;
const NAN: Self;
const E: Self;
const PI: Self;
const TAU: Self;
const LOG2_10: Self;
const LOG2_E: Self;
const LN_2: Self;
const LN_10: Self;
const LOG10_2: Self;
const LOG10_E: Self;
const SQRT_2: Self;
const FRAC_1_PI: Self;
const FRAC_1_SQRT_2: Self;
const FRAC_2_PI: Self;
const FRAC_2_SQRT_PI: Self;
const FRAC_PI_2: Self;
const FRAC_PI_3: Self;
const FRAC_PI_4: Self;
const FRAC_PI_6: Self;
const FRAC_PI_8: Self;
#[must_use]
fn from_bits(bits: Self::Bits) -> Self;
#[must_use]
fn abs(self) -> Self;
#[must_use]
fn recip(self) -> Self;
#[must_use]
fn midpoint(self, rhs: Self) -> Self;
#[must_use]
fn to_radians(self) -> Self;
#[must_use]
fn to_degrees(self) -> Self;
#[must_use]
fn next_down(self) -> Self;
#[must_use]
fn next_up(self) -> Self;
#[must_use]
fn signum(self) -> Self;
#[must_use]
fn copysign(self, sign: Self) -> Self;
#[must_use]
fn is_nan(self) -> Self::Mask;
#[must_use]
fn is_infinite(self) -> Self::Mask;
#[must_use]
fn is_finite(self) -> Self::Mask;
#[must_use]
fn is_normal(self) -> Self::Mask;
#[must_use]
fn is_subnormal(self) -> Self::Mask;
#[must_use]
fn is_sign_negative(self) -> Self::Mask;
#[must_use]
fn is_sign_positive(self) -> Self::Mask;
#[must_use]
fn clamp(self, min: Self, max: Self) -> Self;
#[must_use]
fn min(self, rhs: Self) -> Self;
#[must_use]
fn max(self, rhs: Self) -> Self;
#[must_use]
fn to_bits(self) -> Self::Bits;
}