pub trait SimdFloat: Copy + Sealed {
type Mask;
type Scalar;
type Bits;
Show 22 methods
fn to_bits(self) -> Self::Bits;
fn from_bits(bits: Self::Bits) -> Self;
fn abs(self) -> Self;
fn recip(self) -> Self;
fn to_degrees(self) -> Self;
fn to_radians(self) -> Self;
fn is_sign_positive(self) -> Self::Mask;
fn is_sign_negative(self) -> Self::Mask;
fn is_nan(self) -> Self::Mask;
fn is_infinite(self) -> Self::Mask;
fn is_finite(self) -> Self::Mask;
fn is_subnormal(self) -> Self::Mask;
fn is_normal(self) -> Self::Mask;
fn signum(self) -> Self;
fn copysign(self, sign: Self) -> Self;
fn simd_min(self, other: Self) -> Self;
fn simd_max(self, other: Self) -> Self;
fn simd_clamp(self, min: Self, max: Self) -> Self;
fn reduce_sum(self) -> Self::Scalar;
fn reduce_product(self) -> Self::Scalar;
fn reduce_max(self) -> Self::Scalar;
fn reduce_min(self) -> Self::Scalar;
}portable_simd #86656)Expand description
Operations on SIMD vectors of floats.
Required Associated Types§
sourcetype Mask
type Mask
portable_simd #86656)Mask type used for manipulating this SIMD vector type.
Required Methods§
sourcefn to_bits(self) -> Self::Bits
fn to_bits(self) -> Self::Bits
portable_simd #86656)Raw transmutation to an unsigned integer vector type with the same size and number of lanes.
sourcefn from_bits(bits: Self::Bits) -> Self
fn from_bits(bits: Self::Bits) -> Self
portable_simd #86656)Raw transmutation from an unsigned integer vector type with the same size and number of lanes.
sourcefn abs(self) -> Self
fn abs(self) -> Self
portable_simd #86656)Produces a vector where every lane has the absolute value of the
equivalently-indexed lane in self.
sourcefn recip(self) -> Self
fn recip(self) -> Self
portable_simd #86656)Takes the reciprocal (inverse) of each lane, 1/x.
sourcefn to_degrees(self) -> Self
fn to_degrees(self) -> Self
portable_simd #86656)Converts each lane from radians to degrees.
sourcefn to_radians(self) -> Self
fn to_radians(self) -> Self
portable_simd #86656)Converts each lane from degrees to radians.
sourcefn is_sign_positive(self) -> Self::Mask
fn is_sign_positive(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if it has a positive sign, including
+0.0, NaNs with positive sign bit and positive infinity.
sourcefn is_sign_negative(self) -> Self::Mask
fn is_sign_negative(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if it has a negative sign, including
-0.0, NaNs with negative sign bit and negative infinity.
sourcefn is_nan(self) -> Self::Mask
fn is_nan(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if its value is NaN.
sourcefn is_infinite(self) -> Self::Mask
fn is_infinite(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if its value is positive infinity or negative infinity.
sourcefn is_finite(self) -> Self::Mask
fn is_finite(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if its value is neither infinite nor NaN.
sourcefn is_subnormal(self) -> Self::Mask
fn is_subnormal(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if its value is subnormal.
sourcefn is_normal(self) -> Self::Mask
fn is_normal(self) -> Self::Mask
portable_simd #86656)Returns true for each lane if its value is neither zero, infinite,
subnormal, nor NaN.
sourcefn signum(self) -> Self
fn signum(self) -> Self
portable_simd #86656)Replaces each lane with a number that represents its sign.
1.0if the number is positive,+0.0, orINFINITY-1.0if the number is negative,-0.0, orNEG_INFINITYNANif the number isNAN
sourcefn copysign(self, sign: Self) -> Self
fn copysign(self, sign: Self) -> Self
portable_simd #86656)Returns each lane with the magnitude of self and the sign of sign.
For any lane containing a NAN, a NAN with the sign of sign is returned.
sourcefn simd_min(self, other: Self) -> Self
fn simd_min(self, other: Self) -> Self
portable_simd #86656)Returns the minimum of each lane.
If one of the values is NAN, then the other value is returned.
sourcefn simd_max(self, other: Self) -> Self
fn simd_max(self, other: Self) -> Self
portable_simd #86656)Returns the maximum of each lane.
If one of the values is NAN, then the other value is returned.
sourcefn simd_clamp(self, min: Self, max: Self) -> Self
fn simd_clamp(self, min: Self, max: Self) -> Self
portable_simd #86656)Restrict each lane to a certain interval unless it is NaN.
For each lane in self, returns the corresponding lane in max if the lane is
greater than max, and the corresponding lane in min if the lane is less
than min. Otherwise returns the lane in self.
sourcefn reduce_sum(self) -> Self::Scalar
fn reduce_sum(self) -> Self::Scalar
portable_simd #86656)sourcefn reduce_product(self) -> Self::Scalar
fn reduce_product(self) -> Self::Scalar
portable_simd #86656)sourcefn reduce_max(self) -> Self::Scalar
fn reduce_max(self) -> Self::Scalar
portable_simd #86656)Returns the maximum lane in the vector.
Returns values based on equality, so a vector containing both 0. and -0. may
return either.
This function will not return NaN unless all lanes are NaN.
Examples
let v = f32x2::from_array([1., 2.]);
assert_eq!(v.reduce_max(), 2.);
// NaN values are skipped...
let v = f32x2::from_array([1., f32::NAN]);
assert_eq!(v.reduce_max(), 1.);
// ...unless all values are NaN
let v = f32x2::from_array([f32::NAN, f32::NAN]);
assert!(v.reduce_max().is_nan());Runsourcefn reduce_min(self) -> Self::Scalar
fn reduce_min(self) -> Self::Scalar
portable_simd #86656)Returns the minimum lane in the vector.
Returns values based on equality, so a vector containing both 0. and -0. may
return either.
This function will not return NaN unless all lanes are NaN.
Examples
let v = f32x2::from_array([3., 7.]);
assert_eq!(v.reduce_min(), 3.);
// NaN values are skipped...
let v = f32x2::from_array([1., f32::NAN]);
assert_eq!(v.reduce_min(), 1.);
// ...unless all values are NaN
let v = f32x2::from_array([f32::NAN, f32::NAN]);
assert!(v.reduce_min().is_nan());Run