Movatterモバイル変換


[0]ホーム

URL:


SimdFloat

std::simd::num

TraitSimdFloat 

Source
pub trait SimdFloat:Copy + Sealed {    typeMask;    typeScalar;    typeBits;    typeCast<T:SimdElement>;
Show 24 methods // Required methods fncast<T>(self) -> Self::Cast<T>where T:SimdCast; unsafe fnto_int_unchecked<I>(self) -> Self::Cast<I>where I:SimdCast, Self::Scalar:FloatToInt<I>; fnto_bits(self) -> Self::Bits; fnfrom_bits(bits: Self::Bits) -> Self; fnabs(self) -> Self; fnrecip(self) -> Self; fnto_degrees(self) -> Self; fnto_radians(self) -> Self; fnis_sign_positive(self) -> Self::Mask; fnis_sign_negative(self) -> Self::Mask; fnis_nan(self) -> Self::Mask; fnis_infinite(self) -> Self::Mask; fnis_finite(self) -> Self::Mask; fnis_subnormal(self) -> Self::Mask; fnis_normal(self) -> Self::Mask; fnsignum(self) -> Self; fncopysign(self, sign: Self) -> Self; fnsimd_min(self, other: Self) -> Self; fnsimd_max(self, other: Self) -> Self; fnsimd_clamp(self, min: Self, max: Self) -> Self; fnreduce_sum(self) -> Self::Scalar; fnreduce_product(self) -> Self::Scalar; fnreduce_max(self) -> Self::Scalar; fnreduce_min(self) -> Self::Scalar;
}
🔬This is a nightly-only experimental API. (portable_simd #86656)
Expand description

Operations on SIMD vectors of floats.

Required Associated Types§

Source

typeMask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Mask type used for manipulating this SIMD vector type.

Source

typeScalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Scalar type contained by this SIMD vector type.

Source

typeBits

🔬This is a nightly-only experimental API. (portable_simd #86656)

Bit representation of this SIMD vector type.

Source

typeCast<T:SimdElement>

🔬This is a nightly-only experimental API. (portable_simd #86656)

A SIMD vector with a different element type.

Required Methods§

Source

fncast<T>(self) -> Self::Cast<T>
where T:SimdCast,

🔬This is a nightly-only experimental API. (portable_simd #86656)

Performs elementwise conversion of this vector’s elements to another SIMD-valid type.

This follows the semantics of Rust’sas conversion for floats (truncating or saturatingat the limits) for each element.

§Example
letfloats: Simd<f32,4> = Simd::from_array([1.9, -4.5, f32::INFINITY, f32::NAN]);letints = floats.cast::<i32>();assert_eq!(ints, Simd::from_array([1, -4, i32::MAX,0]));// Formally equivalent, but `Simd::cast` can optimize better.assert_eq!(ints, Simd::from_array(floats.to_array().map(|x| xasi32)));// The float conversion does not round-trip.letfloats_again = ints.cast();assert_ne!(floats, floats_again);assert_eq!(floats_again, Simd::from_array([1.0, -4.0,2147483647.0,0.0]));
Source

unsafe fnto_int_unchecked<I>(self) -> Self::Cast<I>
where I:SimdCast, Self::Scalar:FloatToInt<I>,

🔬This is a nightly-only experimental API. (portable_simd #86656)

Rounds toward zero and converts to the same-width integer type, assuming thatthe value is finite and fits in that type.

§Safety

The value must:

  • Not be NaN
  • Not be infinite
  • Be representable in the return type, after truncating off its fractional part

If these requirements are infeasible or costly, consider using the safe functioncast,which saturates on conversion.

Source

fnto_bits(self) -> Self::Bits

🔬This is a nightly-only experimental API. (portable_simd #86656)

Raw transmutation to an unsigned integer vector type with thesame size and number of elements.

Source

fnfrom_bits(bits: Self::Bits) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Raw transmutation from an unsigned integer vector type with thesame size and number of elements.

Source

fnabs(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Produces a vector where every element has the absolute value of theequivalently-indexed element inself.

Source

fnrecip(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Takes the reciprocal (inverse) of each element,1/x.

Source

fnto_degrees(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts each element from radians to degrees.

Source

fnto_radians(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Converts each element from degrees to radians.

Source

fnis_sign_positive(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if it has a positive sign, including+0.0,NaNs with positive sign bit and positive infinity.

Source

fnis_sign_negative(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if it has a negative sign, including-0.0,NaNs with negative sign bit and negative infinity.

Source

fnis_nan(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if its value isNaN.

Source

fnis_infinite(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if its value is positive infinity or negative infinity.

Source

fnis_finite(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if its value is neither infinite norNaN.

Source

fnis_subnormal(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if its value is subnormal.

Source

fnis_normal(self) -> Self::Mask

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns true for each element if its value is neither zero, infinite,subnormal, norNaN.

Source

fnsignum(self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Replaces each element 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
Source

fncopysign(self, sign: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns each element with the magnitude ofself and the sign ofsign.

For any element containing aNAN, aNAN with the sign ofsign is returned.

Source

fnsimd_min(self, other: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the minimum of each element.

If one of the values isNAN, then the other value is returned.

Source

fnsimd_max(self, other: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the maximum of each element.

If one of the values isNAN, then the other value is returned.

Source

fnsimd_clamp(self, min: Self, max: Self) -> Self

🔬This is a nightly-only experimental API. (portable_simd #86656)

Restrict each element to a certain interval unless it is NaN.

For each element inself, returns the corresponding element inmax if the element isgreater thanmax, and the corresponding element inmin if the element is lessthanmin. Otherwise returns the element inself.

Source

fnreduce_sum(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the sum of the elements of the vector.

§Examples
letv = f32x2::from_array([1.,2.]);assert_eq!(v.reduce_sum(),3.);
Source

fnreduce_product(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Reducing multiply. Returns the product of the elements of the vector.

§Examples
letv = f32x2::from_array([3.,4.]);assert_eq!(v.reduce_product(),12.);
Source

fnreduce_max(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the maximum element in the vector.

Returns values based on equality, so a vector containing both0. and-0. mayreturn either.

This function will not returnNaN unless all elements areNaN.

§Examples
letv = f32x2::from_array([1.,2.]);assert_eq!(v.reduce_max(),2.);// NaN values are skipped...letv = f32x2::from_array([1., f32::NAN]);assert_eq!(v.reduce_max(),1.);// ...unless all values are NaNletv = f32x2::from_array([f32::NAN, f32::NAN]);assert!(v.reduce_max().is_nan());
Source

fnreduce_min(self) -> Self::Scalar

🔬This is a nightly-only experimental API. (portable_simd #86656)

Returns the minimum element in the vector.

Returns values based on equality, so a vector containing both0. and-0. mayreturn either.

This function will not returnNaN unless all elements areNaN.

§Examples
letv = f32x2::from_array([3.,7.]);assert_eq!(v.reduce_min(),3.);// NaN values are skipped...letv = f32x2::from_array([1., f32::NAN]);assert_eq!(v.reduce_min(),1.);// ...unless all values are NaNletv = f32x2::from_array([f32::NAN, f32::NAN]);assert!(v.reduce_min().is_nan());

Dyn Compatibility§

This trait isnotdyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<const N:usize>SimdFloat forSimd<f32, N>

Source§

impl<const N:usize>SimdFloat forSimd<f64, N>


[8]ページ先頭

©2009-2026 Movatter.jp