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
, NaN
s 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
, NaN
s 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.0
if the number is positive,+0.0
, orINFINITY
-1.0
if the number is negative,-0.0
, orNEG_INFINITY
NAN
if 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