• 定点c程序之四:除法


    设浮点除法运算的表达式为:
    float x,y,z;
    z=x/y ;
    假设经过统计后被除数x的Q值为Qx,除数y的Q值为Qy,商z的Q值为Qz,则
    zq*2^(- Qz)   = xq*2^(-Qx)/ yq*2^(- Qy)
    zq=(xq)*2^( Qz -Qx +Qy)/yq

     
    但是在通用的DSP中,一般不提供单周期的除法指令,必须用除法子程序来完成定点数除法。除法是乘法的逆运算,乘法包括一系列的移位和加法;除法可分解为一系列减法和移位

    DSP一般都设计了一条特殊的减法指令(如SUBC)来完成定点数的除法运算。

    在ITU-T的语音编码中的定点基本操作中,除法程序如下:

     Word16 div_s (Word16 var1, Word16 var2) //实现 var1/var2
    {
    Word16 var_out = 0;
    Word16 iteration;
    Word32 L_num = (Word32)var1;
    Word32 L_denom = (Word32)var2;
    for (iteration = 0; iteration < 15; iteration++)
    {
    var_out <<= 1;
    L_num <<= 1;
    if (L_num >= L_denom)
    {
    L_num = L_sub (L_num, L_denom);
    var_out = add (var_out, 1);
    }
    }
    return (var_out);
    }
    主要原理是每次设定商是16bit数,除去符号位,有15位有效数据,那么就循环15次,每次循环中,如果被除数大于除数,就把被除数减去除数,商加一,然后下次循环,让减过的被除数左移一位,同时商也左移一位,重复15次。

    这样商是一个Q15的数,而且输入要求被除数小于除数,也就是商肯定是个小数的情况才行。

  • 相关阅读:
    正则表达式入门教程
    js获取class
    锋利的jQuery第6章 jQuery与Ajax的应用
    显示隐藏左侧菜单
    unicode转为汉字
    $.ajax
    .ashx文件
    c#正则表达式
    调试发现的小错误
    sql2005连接不到本地数据库
  • 原文地址:https://www.cnblogs.com/c6000/p/1805958.html
Copyright © 2020-2023  润新知