读书人

请们看看有关问题很奇怪!帮忙看看

发布时间: 2012-02-22 19:36:55 作者: rapoo

请大虾们看看,问题很奇怪!帮忙看看!
我自己写了除法的子函数div,可把它运用到程序中,输出的波形就不对了,帮忙看下!int div(int data_s,int data_z)
{int z=0;
if(data_s <0||data_z <0)
{ int x=abs(data_s),y=abs(data_z);
while(x> =y)
{x-=y;++z;}}
else
{ int x=data_s,y=data_z;
while(x> =y)
{x-=y;++z;}
}
if(data_s <0||data_z <0)
return (-z);
else
return z;
}
void adptive(int e_in)
{
int i,temp_input_pos;
long P;
long tmp_wn;
long e_xn;
for(i=0;i <FIR_LEN;i++)
{
temp_input_pos=input_pos+i+1;
temp_input_pos&=0x00ff;//temp_input_pos-((temp_input_pos> > 8) < <8);
e_xn=(long)e_in*(long)xn[temp_input_pos];
P =div(e_xn,miu);//P=e_xn/miu;
tmp_wn = (long)wn[i] < <16L;
tmp_wn+= 32768 + P;
wn[i] = tmp_wn> > 16L;
}

}
上面是两个子函数,下面的要调用div,要是直接用/而不用div,输出就对了的,如果把div单独运行,起结果也是对了的!求大虾们帮忙啊!


[解决办法]
这段有问题,其他还没看
if(data_s <0||data_z <0)
return (-z);
else
return z;
一个 <0,另一个> 0才返回-z,两个都 <0返回z

int div(int data_s,int data_z)
{int sign=1,z=0;
if(data_s <0){sign=!sign;data_s=-data_s;}
else if(data_s==0){return z;}
if(data_z <0){sign=!sign;data_z=-data_z;}
else if(data_z==0){return z;}
while(data_s> =data_z){data_s-=data_z;++z;}
return sign?z:-z;
}

读书人网 >C语言

热点推荐