А разве это 
long Filter(long x)
  {
  ststic long out;
  out=out - ((out*20)>>10) + x;
  return (out*20)>>10;
  }
и 
То есть нужно добавить справа к значению фильтра нужное число дробных разрядов и каждое новое входное значение левым сдвигом делать фикспойнтом. При выводе значения фильтра наружу восстанавливать целочисленную разрядность правым сдвигом. 
не одно и тоже?!