定点c程序之四:除法
2010-08-22 21:44
197 查看
设浮点除法运算的表达式为:
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的数,而且输入要求被除数小于除数,也就是商肯定是个小数的情况才行。
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的数,而且输入要求被除数小于除数,也就是商肯定是个小数的情况才行。
相关文章推荐
- 定点c程序之四:除法
- 【模板小程序】十进制大数除法(输出商和余数)
- (ZZ)素数算法大全,及C程序实现优化详解 (一) 试除法
- 王爽《汇编语言》显示字符串、除法溢出、数值显示程序
- 四字节除以三字节无符号数除法程序
- 光流定点程序梳理
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大数除法程序解析
- Java入门学习-学会try/catch/throw的用法。做出一个计算器除法功能,除以0时程序必须给出提示。
- 实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入t
- 定点c程序之一:定标
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 定点c程序之一:定标
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 程序中的除法取余
- [算法]用位运算的方法实现无符号整数的除法原理及程序
- 开辟线程让程序定点定时运行
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 定点c程序之六(完):Q值的选取和动态Q值
- 1003:Hangover-条件是程序可以持续的条件-每一次循环sum要清零-for括号后不要;-float与double-除法不要除以0