Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

Scalar IEEE 754 Float API

void f32_unpack()

将IEEE 754单精度浮点数解包为32位尾数和指数。

示例:

// 解包 1.52345246 * 10^(-5)
float val = 1.52345246e-5;
int32_t mant;
exponent_t exp;
f32_unpack(&mant, &exp, val);

printf("%ld * 2^(%d) <-- %e\n", mant, exp, val);

参数:

  • int32_t *mantissa – [out] 解包后的尾数
  • exponent_t *exp – [out] 解包后的指数
  • const float input – [in] 要解包的浮点数值

void f32_unpack_s16()

将IEEE 754单精度浮点数解包为16位尾数和指数。请注意,此操作可能导致精度损失。

示例:

// 解包 1.52345246 * 10^(-5)
float val = 1.52345246e-5;
int16_t mant;
exponent_t exp;
f32_unpack_s16(&mant, &exp, val);

printf("%ld * 2^(%d) <-- %e\n", mant, exp, val);

参数:

  • int16_t *mantissa – [out] 解包后的尾数
  • exponent_t *exp – [out] 解包后的指数
  • const float input – [in] 要解包的浮点数值

float_s32_t f32_to_float_s32()

将IEEE754的float转换为float_s32_t

参数:

  • const float x – [in] 输入值

返回值:

  • float_s32_t表示x

异常:

  • ET_ARITHMETIC 如果x是无穷大或NaN,则引发异常

float_s32_t f64_to_float_s32()

将IEEE754的double转换为float_s32_t。请注意,此操作可能导致精度损失。

参数:

  • const double x – [in] 输入值

返回值:

  • float_s32_t表示x

异常:

  • ET_ARITHMETIC 如果x是无穷大或NaN,则引发异常

float f32_sin()

获取指定角度的正弦值。使用截断为8项的sin()sin()的幂级数展开计算sin(θ)sin(\theta)

参数:

  • const float theta – [in] 要计算正弦值的角度θ\theta(以弧度为单位)

返回值:

  • 角度θ\theta的正弦值

异常:

  • ET_ARITHMETIC 如果θ\theta是无穷大或NaN,则引发异常

float f32_cos()

获取指定角度的余弦值。使用截断为8项的sin()sin()的幂级数展开计算cos(θ)=sin(θ+π2)cos(\theta) = sin(\theta+\frac{\pi}{2})

参数:

  • const float theta – [in] 要计算余弦值的角度θ\theta(以弧度为单位)

返回值:

  • 角度θ\theta的余弦值

异常:

  • ET_ARITHMETIC 如果θ\theta是无穷大或NaN,则引发异常

float f32_log2()

获取指定值的以2为底的对数。此函数使用截断为11项的log2()log_2()的幂级数展开计算log2(x)log_2(x)

参数:

  • const float x – [in] 要获取对数的输入值xx

返回值:

  • log2(x)log_2(x)

异常:

  • ET_ARITHMETIC 如果xx是无穷大或NaN,则引发异常

float f32_power_series()

使用指定的系数计算幂级数求和。此函数用于计算幂级数的前NN项之和,从x0x^0项开始截断。

b是一个包含系数bˉ\bar bNN元素向量,它与相应的xx的幂相乘。

NNbˉ\bar b的长度,也是要求和的项数。

计算过程:ak=0N1(xkbk)a \leftarrow \sum_{k=0}^{N-1}\left( x^k\,b_k \right)

参数:

  • const float x – [in] 输入值xx
  • const float b[] – [in] 系数向量bˉ\bar b
  • const unsigned N – [in] 要求和的幂级数项数。

返回值:

  • aa,前NN项幂级数的和。

异常:

  • ET_ARITHMETIC 如果xxbˉ\bar b的任何元素是无穷大或NaN,则引发异常。

float f32_normA()

将输入xx以规范化形式A表示。

此函数在内部用于将float值转换为某些特定目的所需的表示形式。

特别地,此函数的行为类似于frexpf(),其中保证返回值aa要么为00,要么满足0.5a<1.00.5 \le |a| < 1.0,并且输出指数pp满足x=a2px = a \cdot 2^{p}

考虑到未来的工作可能需要替代的“规范化”表示形式,这里将其定义为形式A。

参数:

  • exponent_t *p – [out] 输出指数pp

  • const float x – [out] 输入值xx

返回值:

  • 返回以规范化形式A表示的aa

异常:

  • ET_ARITHMETIC 如果xxbˉ\bar b的任何元素是无穷大或NaN,则引发异常。