у меня получается так, вроде работает, при условии m>k1, m>k2
#define m (8)
#define k1 (2)
#define k2 (4)
long Detektor(long x)
{
static long y0;
x=x<<m;
if((x-y0)>0)
у0=у0+(х>>k1)-(у0>>k1);
}
else
у0=у0+(х>>k2)-(у0>>k2);
return y0>>m;