32-bit Scalar API
#define S32_SQRT_MAX_DEPTH (31)
用于计算s32_sqrt()的最大位深度。
float s32_to_f32()
将浮点值打包成IEEE 754单精度浮点数。
返回的值是最接近于 的可表示近似值,其中 是mantissa, 是exp。
**注意:**这个操作可能会导致精度损失。
示例:
// 将 -12345678 * 2^{-13} 打包成浮点数
int32_t mant = -12345678;
exponent_t exp = -13;
float val = s32_to_f32(mant, exp);
printf("%e <-- %ld * 2^(%d)\n", val, mant, exp);
参数:
const int32_t mantissa– [out] 要打包的值的尾数const exponent_t exp– [out] 要打包的值的指数
返回值: 输入值的float表示
int16_t s32_to_s16()
将32位浮点标量转换为16位浮点标量。
将由32位尾数b和指数b_exp表示的32位浮点标量转换为由返回的16位尾数和输出指数a_exp表示的16位浮点标量。
参数:
exponent_t* a_exp– [out] 输出指数const int32_t b– [out] 32位输入尾数const exponent_t b_exp– [out] 输入指数
返回值: 16位输出尾数
int32_t s32_sqrt()
计算32位浮点标量的平方根。
b和b_exp一起表示输入 。同样,a和a_exp一起表示结果 。
depth表示将计算的最高有效位数。这里使用较小的值可以提高执行速度,但会降低精度。depth的最大有效值为@ref S32_SQRT_MAX_DEPTH。
操作:
参数:
exponent_t* a_exp– [out] 输出指数const int32_t b– [out] 输入尾数const exponent_t b_exp– [out] 输入指数const unsigned depth– [out] 要计算的最高有效位数
返回值: 输出尾数
int32_t s32_inverse()
计算32位整数的倒数。
b表示整数 。a和a_exp一起表示结果 。
操作:
定点或浮点:
如果 是具有隐式或显式指数 的定点或浮点值的尾数,则
因此,应该从输出指数 中减去 。
参数:
exponent_t* a_exp– [out] 输出指数const int32_t b– [out] 输入整数
返回值: 输出尾数
int32_t s32_mul()
计算两个32位浮点标量的乘积。
a和a_exp一起表示结果 。
b和b_exp一起表示结果 。
c和c_exp一起表示结果 。
操作:
参数:
exponent_t* a_exp– [out] 输出指数const int32_t b– [out] 第一个输入尾数const int32_t c– [out] 第二个输入尾数const exponent_t b_exp– [out] 第一个输入指数const exponent_t c_exp– [out] 第二个输入指数
返回值: 输出尾数
sbrad_t radians_to_sbrads()
将角度从弧度转换为一种修改的二进制表示。
某些三角函数(例如sbrad_sin())需要其参数以修改的角度表示,而不是以弧度(例如radian_q24_t)指定的角度。修改的二进制表示考虑了函数的各种属性,以简化某些操作。
对于任何角度 ,存在唯一的角度 ,其中 且 。这个函数实际上只是将输入角度 映射到该区域中的相应角度 ,并以Q1.31格式返回结果。
在这个库中,结果角度 的单位被称为'sbrad'。'brad'是因为 是一种二进制角度测量,'s'是因为考虑到了 的对称性。
参数:
const radian_q24_t theta– [out] 输入角度 ,以弧度表示(Q8.24)
返回值: 输出角度 ,以sbrads表示
q2_30 sbrad_sin()
计算指定角度的正弦值。
该函数计算 ,并以Q2.30格式返回结果。
输入角度 必须用sbrads表示(参见radians_to_sbrads),并且必须表示为介于(包括边界)之间的值(作为Q1.31)。
操作:
参数:
const sbrad_t theta– [in] 输入角度 ,以sbrads表示
返回值:
以Q2.30格式表示的指定角度的正弦值。
q2_30 sbrad_tan()
计算指定角度的正切值。
该函数计算 ,并以Q2.30格式返回结果。
输入角度 必须用sbrads表示(参见radians_to_sbrads),并且必须表示为介于(包括边界)之间的值(作为Q1.31)。
操作:
参数:
const sbrad_t theta– [in] 输入角度 ,以sbrads表示
返回值:
以Q2.30格式表示的指定角度的正切值。
q2_30 q24_sin()
计算指定角度的正弦值。
该函数计算 ,并以Q2.30格式返回结果。
操作:
参数:
const radian_q24_t theta– [in] 输入角度 ,以弧度表示(Q8.24)
返回值:
以Q2.30格式表示的 。
q2_30 q24_cos()
计算指定角度的余弦值。
该函数计算 ,并以Q2.30格式返回结果。
操作:
参数:
const radian_q24_t theta– [in] 输入角度 ,以弧度表示(Q8.24)
返回值:
以Q2.30格式表示的 。
float_s32_t q24_tan()
计算指定角度的正切值。
该函数计算 。结果以float_s32_t形式返回,其中包含尾数和指数。
当 (其中为整数)时, 的值被视为未定义。如果 满足这个条件,将引发异常。
操作:
参数:
const radian_q24_t theta– [in] 输入角度 ,以弧度表示(Q8.24)
返回值:
以float_s32_t形式表示的 。
异常:
ET_ARITHMETIC如果 未定义,将引发异常。
q2_30 q30_exp_small()
计算接近 的Q2.30值的指数函数 。
该函数计算 ,其中 是带有30个小数位的定点值。
该函数使用截断幂级数实现 ,仅适用于范围在 内的输入。
输出也以Q2.30格式表示。
对于范围 ,与math.h中的exp(double)相比,最大观测误差为 2(对应于 )。
对于范围 ,相应的最大观测误差为 324,或者近似为 。
要计算 超出 范围的 ,请使用 float_s32_exp()。
操作:
参数:
const q2_30 x– [in] 输入值
返回值:
q8_24 q24_logistic()
计算指定点的逻辑函数值。
该函数计算逻辑函数的值 。这是一个在 下方和 上方有界的S形曲线。
输入 和输出 都是Q8.24定点值。
如果更注重速度而不是精度,则可以使用 q24_logistic_fast()。
操作:
参数:
const q8_24 x– [in] 输入值
返回值:
q8_24 q24_logistic_fast()
简介: 在指定点处计算逻辑函数的值。
该函数计算逻辑函数 的值。逻辑函数是一条由 和 两边界限定的 S 形曲线。
输入 和输出 都是 Q8.24 定点数。
这个实现在精度和速度之间进行权衡,以分段线性的方式近似结果。如果需要精确的结果,应该使用 q24_logistic()。
操作:
参数:
const q8_24 x– [out] 输入值
返回值:
void s32_to_chunk_s32()
简介: 将整数广播到向量块。
该函数将输入 广播到向量块 的 8 个元素中。
操作:
参数:
int32_t a[VPU_INT32_EPV]– [out] 输出向量块int32_t b– [out] 输入值
异常: 如果 a 不是双字对齐的,则引发 ET_LOAD_STORE 异常(参见 @ref note_vector_alignment)
void q30_powers()
简介: 获取 的前 个幂次
该函数计算 Q2.30 输入 的前 个幂次(从 开始)。结果以 Q2.30 格式输出,保存在 中。
操作:
参数:
q2_30 a[]– [out] 输出const q2_30 b– [out] 输入const unsigned N– [out] 要计算的 的元素个数
void s32_odd_powers()
简介: 用 的奇次幂填充向量。
该函数使用输入 的奇次幂填充输出向量 的元素。输出前 count 个奇次幂。最高幂次输出为 。
每次乘法的 64 位乘积右移 shr 位,并截断为最低的 32 位。如果 是一个带有 shr 位小数的定点数,则每个 的 Q 格式与输入 相同。shr 必须是非负数。
该函数不进行舍入或饱和处理。用户需要确保避免溢出。
典型的用例是计算具有奇对称性函数的幂级数。
操作:
参数:
int32_t a[]– [out] 输出向量const int32_t b– [out] 输入const unsigned count– [out] 要输出的元素数量。const right_shift_t shr– [out] 64 位乘积右移的位数。