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;
}
portable_simd
#86656)Expand description
对浮点数的 SIMD vectors 的操作。
Required Associated Types§
sourcetype Mask
type Mask
portable_simd
#86656)用于操作此 SIMD vector 类型的掩码类型。
Required Methods§
sourcefn to_bits(self) -> Self::Bits
fn to_bits(self) -> Self::Bits
portable_simd
#86656)原始转换为无符号整数 vector 类型,其大小和数量与 lanes 相同。
sourcefn from_bits(bits: Self::Bits) -> Self
fn from_bits(bits: Self::Bits) -> Self
portable_simd
#86656)来自具有相同大小和数量的 lanes 的无符号整数 vector 类型的原始变换。
sourcefn abs(self) -> Self
fn abs(self) -> Self
portable_simd
#86656)生成一个 vector,其中每个 lane 都具有 self
中等效索引 lane 的绝对值。
sourcefn recip(self) -> Self
fn recip(self) -> Self
portable_simd
#86656)获取每个 lane 的倒数 (inverse),1/x
。
sourcefn to_degrees(self) -> Self
fn to_degrees(self) -> Self
portable_simd
#86656)将每个 lane 从弧度转换为度数。
sourcefn to_radians(self) -> Self
fn to_radians(self) -> Self
portable_simd
#86656)将每个 lane 从度数转换为弧度。
sourcefn is_sign_positive(self) -> Self::Mask
fn is_sign_positive(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 具有正号,则为每个 lane 返回 true,包括 +0.0
、具有正符号位的 NaN
和正无穷大。
sourcefn is_sign_negative(self) -> Self::Mask
fn is_sign_negative(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 具有负号,则为每个 lane 返回 true,包括 -0.0
、具有负符号位的 NaN
和负无穷大。
sourcefn is_nan(self) -> Self::Mask
fn is_nan(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 的值为 NaN
,则为每个 lane 返回 true。
sourcefn is_infinite(self) -> Self::Mask
fn is_infinite(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 的值是正无穷大或负无穷大,则为每个 lane 返回 true。
sourcefn is_finite(self) -> Self::Mask
fn is_finite(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 的值既不是无穷大也不是 NaN
,则为每个 lane 返回 true。
sourcefn is_subnormal(self) -> Self::Mask
fn is_subnormal(self) -> Self::Mask
portable_simd
#86656)如果每个 lane 的值为 subnormal,则为每个 lane 返回 true。
sourcefn is_normal(self) -> Self::Mask
fn is_normal(self) -> Self::Mask
portable_simd
#86656)如果 lane 的值既不是零、无限、subnormal 也不是 NaN
,则为每个 lane 返回 true。
sourcefn signum(self) -> Self
fn signum(self) -> Self
portable_simd
#86656)用代表其符号的数字替换每个 lane。
1.0
如果数字是正数,+0.0
或INFINITY
-1.0
如果数字是负数,-0.0
或NEG_INFINITY
NAN
如果数字是NAN
sourcefn copysign(self, sign: Self) -> Self
fn copysign(self, sign: Self) -> Self
portable_simd
#86656)以 self
的大小和 sign
的符号返回每个 lane。
对于任何包含 NAN
的 lane,将返回带有 sign
符号的 NAN
。
sourcefn simd_min(self, other: Self) -> Self
fn simd_min(self, other: Self) -> Self
portable_simd
#86656)返回每个 lane 的最小值。
如果其中一个值为 NAN
,则返回另一个值。
sourcefn simd_max(self, other: Self) -> Self
fn simd_max(self, other: Self) -> Self
portable_simd
#86656)返回每个 lane 的最大值。
如果其中一个值为 NAN
,则返回另一个值。
sourcefn simd_clamp(self, min: Self, max: Self) -> Self
fn simd_clamp(self, min: Self, max: Self) -> Self
portable_simd
#86656)将每个 lane 限制在一定的区间内,除非它是 NaN。
对于 self
中的每个 lane,如果 lane 大于 max
,则返回 max
中对应的 lane,如果 lane 小于 min
,则返回 min
中对应的 lane。
否则返回 self
中的 lane。
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)返回 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());
Runsourcefn reduce_min(self) -> Self::Scalar
fn reduce_min(self) -> Self::Scalar
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