CSI-DSP  Version 1.0.0
CSI DSP Software Library
函数
指数系列函数

函数

float64_t csky_exp_f64 (float64_t x)
 双精度数以e为底的指数函数的快速逼近 更多...
 
float64_t csky_pow2_f64 (float64_t x)
 双精度数以2为底的指数函数的快速逼近 更多...
 
float64_t csky_pow_f64 (float64_t x, float64_t y)
 双精度数指数函数快速逼近 更多...
 

简要说明

指数系列函数包括pow, pow2 和 exp,分别表示以任意值为底,以2为底,以e为底的函数。 计算这些函数最常见的方法主要有多项式逼近法和查表法。这是一个双精度版本,即, 输入输出都为双精度。

函数说明

float64_t csky_exp_f64 ( float64_t  x)
参数
[in]x双精度输入,指数部分
返回
e^x

函数的实现是基于查表法,由一个712值的粗值表和一个1024值的精确值表结合完成。 这两个表格的值都为双双精度。

实现过程如下:

  1. 首先,用查表法计算x在[smallint, bigint]范围内的值。
  2. 然后,处理特殊情况,即,x大于badint或者 x 小于smallint。
  3. 最后,用查表法计算x在[bigint, badint]范围内的值。
float64_t csky_pow2_f64 ( float64_t  x)
参数
[in]x双精度输入,指数部分
返回
2^x

函数是基于查表法实现的,通过512值的差值表和512值的精确值表结合完成。

实现过程如下:

  1. 处理特殊情况。
  2. 参数复位,选择整数ex, -256 <= t < 256, 和某个-1/1024 <= x1 <= 1024, 使得
    x = ex + t/512 + x1
  3. 调整精确表格入口,找到在[-1e6,1e6]范围内的e,使得
    x = ex + t/512 + e + x2
  4. 用四次多项式逼近2^x2 - 1,使其误差在[-2^-10-2^-30,2^-10+2^-30]范围内, 小于10^-19。
float64_t csky_pow_f64 ( float64_t  x,
float64_t  y 
)
参数
[in]x双精度输入,指数函数的底
[in]x双精度输入,指数函数的指数
返回
x^y

函数的实现基础是变换:

x^y = e^(y*log(x))

实现步骤如下:

  1. 首先,根据x的范围,用级数展开或者查表来计算log(x)的值。
  2. 然后,通过e^(x+xx)计算e^(y*log(x))的值,在e^(x+xx)函数中, x的范围不同,会有不同的计算方法。
  3. 最后,是对一些特殊情况的处理。