幂运算与自然指数。
Exponent
00 Remarks
VB 的 ^ 运算符会被编译成 Math.Pow(), 而幂函数没有逐元素硬件指令,因此“指数也在变化”的重载依旧是标量实现。
真正可被向量化的是指数固定的场景:当指数为 2 时可以直接用乘法 (x * x 与正确舍入的 pow(x, 2) 结果逐位相同)、指数为 0.5 时可以用开方。这正是 SimdMath.PowScalar() 所做的特化, 也是 SquareDistance 这类热点(指数恒为 2)的主要加速来源。
注意:指数为 3 / 4 的特化用的是连续乘法,与正确舍入的 pow 相比可能相差几个 ULP(相对误差量级 1e-16)。
01 Syntax
Microsoft.VisualBasic.Math.SIMD.Exponent
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| f64_scalar_op_exponent_f64 | 1 | 标量的向量次幂:v1 ^ v2(i) |
| f64_op_exponent_f64_scalar | 1 | 向量的固定次幂:v1(i) ^ v2 |
| f64_op_exponent_f64 | 1 | 向量对向量的逐元素次幂:v1(i) ^ v2(i) |
| f64_exp | 1 | 逐元素自然指数:Exp(v(i)) |
| f32_scalar_op_exponent_f32 | 1 | 标量的向量次幂(Single) |
| f32_op_exponent_f32_scalar | 1 | 向量的固定次幂(Single) |
| f32_op_exponent_f32 | 1 | 向量对向量的逐元素次幂(Single) |
| f32_exp | 1 | 逐元素自然指数(Single) |
03 Members
f64_scalar_op_exponent_f64(
Double, Double())标量的向量次幂:v1 ^ v2(i)
f64_op_exponent_f64_scalar(
Double(), Double)向量的固定次幂:v1(i) ^ v2
Remarks
指数为 2 / 3 / 4 / 0.5 时会走到向量化的快速路径,其余指数退回标量 ^。
f64_op_exponent_f64(
Double(), Double())向量对向量的逐元素次幂:v1(i) ^ v2(i)
f64_exp(
Double())逐元素自然指数:Exp(v(i))
f32_scalar_op_exponent_f32(
Single, Single())标量的向量次幂(Single)
f32_op_exponent_f32_scalar(
Single(), Single)向量的固定次幂(Single)
f32_op_exponent_f32(
Single(), Single())向量对向量的逐元素次幂(Single)
f32_exp(
Single())逐元素自然指数(Single)