Listing 3 Sample code that avoids computations that lead to expensive exception handling

typedef  struct resdesc
{
       float out1, out2;   /* filter state variables */
       float a1, b1, b2;   /* filter coefficients */
} resdesc;
static void Avoid_Underflow(resdesc *o)
{
       /* clamp state variables */
       if (o->out1>-0.0000000001f
                     && o->out1<0.0000000001f)
              o->out1 = 0.0f;
       if (o->out2>-0. 0000000001f
                     && o->out2<0.0000000001f)
              o->out2 = O.Of;
}
/* assumes coefficients are constant throughout block */
void Resonator(resdesc *f , int n, float *out,
             int stride, float *in, int istride )
{
        float ym;
        int j;
        
       j=0;
       for(j=0;j<n;++j)
       {
              ym = f->b1 * f->out1 + f->b2 * f->out2
                      + f->a1 * in[j*istride];
              f->out2 = f->out1;
              f->out1 = ym;
              out[j*stride] = ym;
       }
       Avoid_Underflow (f);
}

/* End of File */