Trait core::simd::SimdFloat

source ·
pub trait SimdFloat: Copy + Sealed {
    type Mask;
    type Scalar;
    type Bits;

Show 22 methods // Required 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;
}
🔬This is a nightly-only experimental API. (portable_simd #86656)
Expand description

对浮点数的 SIMD vectors 的操作。

Required Associated Types§

source

type Mask

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

用于操作此 SIMD vector 类型的掩码类型。

source

type Scalar

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

此 SIMD vector 类型包含的标量类型。

source

type Bits

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

此 SIMD vector 类型的位表示。

Required Methods§

source

fn to_bits(self) -> Self::Bits

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

原始转换为无符号整数 vector 类型,其大小和数量与 lanes 相同。

source

fn from_bits(bits: Self::Bits) -> Self

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

来自具有相同大小和数量的 lanes 的无符号整数 vector 类型的原始变换。

source

fn abs(self) -> Self

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

生成一个 vector,其中每个 lane 都具有 self 中等效索引 lane 的绝对值。

source

fn recip(self) -> Self

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

获取每个 lane 的倒数 (inverse),1/x

source

fn to_degrees(self) -> Self

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

将每个 lane 从弧度转换为度数。

source

fn to_radians(self) -> Self

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

将每个 lane 从度数转换为弧度。

source

fn is_sign_positive(self) -> Self::Mask

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

如果每个 lane 具有正号,则为每个 lane 返回 true,包括 +0.0、具有正符号位的 NaN 和正无穷大。

source

fn is_sign_negative(self) -> Self::Mask

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

如果每个 lane 具有负号,则为每个 lane 返回 true,包括 -0.0、具有负符号位的 NaN 和负无穷大。

source

fn is_nan(self) -> Self::Mask

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

如果每个 lane 的值为 NaN,则为每个 lane 返回 true。

source

fn is_infinite(self) -> Self::Mask

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

如果每个 lane 的值是正无穷大或负无穷大,则为每个 lane 返回 true。

source

fn is_finite(self) -> Self::Mask

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

如果每个 lane 的值既不是无穷大也不是 NaN,则为每个 lane 返回 true。

source

fn is_subnormal(self) -> Self::Mask

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

如果每个 lane 的值为 subnormal,则为每个 lane 返回 true。

source

fn is_normal(self) -> Self::Mask

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

如果 lane 的值既不是零、无限、subnormal 也不是 NaN,则为每个 lane 返回 true。

source

fn signum(self) -> Self

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

用代表其符号的数字替换每个 lane。

  • 1.0 如果数字是正数,+0.0INFINITY
  • -1.0 如果数字是负数,-0.0NEG_INFINITY
  • NAN 如果数字是 NAN
source

fn copysign(self, sign: Self) -> Self

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

self 的大小和 sign 的符号返回每个 lane。

对于任何包含 NAN 的 lane,将返回带有 sign 符号的 NAN

source

fn simd_min(self, other: Self) -> Self

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

返回每个 lane 的最小值。

如果其中一个值为 NAN,则返回另一个值。

source

fn simd_max(self, other: Self) -> Self

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

返回每个 lane 的最大值。

如果其中一个值为 NAN,则返回另一个值。

source

fn simd_clamp(self, min: Self, max: Self) -> Self

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

将每个 lane 限制在一定的区间内,除非它是 NaN。

对于 self 中的每个 lane,如果 lane 大于 max,则返回 max 中对应的 lane,如果 lane 小于 min,则返回 min 中对应的 lane。 否则返回 self 中的 lane。

source

fn reduce_sum(self) -> Self::Scalar

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

返回 vector 的 lane 的总和。

Examples
let v = f32x2::from_array([1., 2.]);
assert_eq!(v.reduce_sum(), 3.);
Run
source

fn reduce_product(self) -> Self::Scalar

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

减少乘。返回 vector 的 lanes 的乘积。

Examples
let v = f32x2::from_array([3., 4.]);
assert_eq!(v.reduce_product(), 12.);
Run
source

fn reduce_max(self) -> Self::Scalar

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

返回 vector 中的最大 lane。

返回基于相等的值,因此包含 0.-0. 的 vector 可以返回任意一个值。

这个函数不会返回 NaN,除非所有的 lane 都是 NaN

Examples
let v = f32x2::from_array([1., 2.]);
assert_eq!(v.reduce_max(), 2.);

// 跳过 NaN 值...
let v = f32x2::from_array([1., f32::NAN]);
assert_eq!(v.reduce_max(), 1.);

// ...除非所有值都是 NaN
let v = f32x2::from_array([f32::NAN, f32::NAN]);
assert!(v.reduce_max().is_nan());
Run
source

fn reduce_min(self) -> Self::Scalar

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

返回 vector 中的最小 lane。

返回基于相等的值,因此包含 0.-0. 的 vector 可以返回任意一个值。

这个函数不会返回 NaN,除非所有的 lane 都是 NaN

Examples
let v = f32x2::from_array([3., 7.]);
assert_eq!(v.reduce_min(), 3.);

// 跳过 NaN 值...
let v = f32x2::from_array([1., f32::NAN]);
assert_eq!(v.reduce_min(), 1.);

// ...除非所有值都是 NaN
let v = f32x2::from_array([f32::NAN, f32::NAN]);
assert!(v.reduce_min().is_nan());
Run

Implementors§

source§

impl<const LANES: usize> SimdFloat for Simd<f32, LANES>where LaneCount<LANES>: SupportedLaneCount,

§

type Mask = Mask<<i32 as SimdElement>::Mask, LANES>

§

type Scalar = f32

§

type Bits = Simd<u32, LANES>

source§

impl<const LANES: usize> SimdFloat for Simd<f64, LANES>where LaneCount<LANES>: SupportedLaneCount,

§

type Mask = Mask<<i64 as SimdElement>::Mask, LANES>

§

type Scalar = f64

§

type Bits = Simd<u64, LANES>