log和exp的工程快速实现

数字信号处理中经常要用到指数和对数运算。在通用pc上运行这两个基本运算,虽然可以通过调用math.h的通用库函数来实现,但是效率是非常低下的。如果你对精度要求不高,对运算效率要求很高。就用我下面的子函数来代替吧。
指数运算MyExp函数是在网站找资料并整理出来的,计算结果是精确值。
对数运算是我自己翻出了一篇1960年的论文,然后再结合看了一些其他文章,琢磨了一整天才搞出来的,该函数求得的是近似值,我在MATLAB环境下评估了一下,1~10000范围精度保持在5%以内。符合精度要求不高的环境。尤其是通信上面的应用。
纯原创,希望能够帮到大家。如果需要论文,可以联系本人。
以下是源码,谁用谁知道。enjoy it。
  double MyExp(double y)
{
    double result;
    *((int *)(&result) + 0) = 0;
    *((int *)(&result) + 1) = 1512775 * y + 1072632447;
    return result;
}
/*
** log快速运算
** 创建时间:2017-3-3
** 作者:尹超
** 版本号:V1.0
** 描述:用来快速计算以2为底的对数
** 输入:x->次数
** 输出:无
** 返回值:log2x的计算值
** 备注: x必须大于1
*/
double FastLog(double x)
{
    double m;
    int k = 1, op = 2;
    if (x <= 1)     return 0;
    while ((x / op) >= 2)
    {
        op <<= 1;
        k++;
    }
    m = x / op - 1;
    if (m <= 0.25)      return 1.3125 * m + k;
    else if (m <= 0.5)  return 1.078125 * m + 0.00015625 + k;
    else if (m <= 0.75) return 1.015625 * m + 0.0625 + k;
    else if (m <= 1)    return 0.75 * m + 0.25 + k;
    else                return 0; 
}
int main()
{
    double x,y;
    x = MyExp(value);
    y = FastLog(Val);
    return 0;
}  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yinchao163

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值