for (i=0;i<nsf;i++) { exc[es+i]=gain[0]*e[2][i]+gain[1]*e[1][i]+gain[2]*e[0][i];
for (i = 0;i < nsf; i++) { exc[es + i] = NbCodec.VERY_SMALL + gain[0] * e[2][i] + gain[1] * e[1][i] + gain[2] * e[0][i];
  public final int unquant(float[] exc, int es, int start, float pitch_coef,                             int nsf, float[] gain_val, Bits bits,                           int count_lost, int subframe_offset, float last_pitch_gain)  {    int i, pitch, gain_index;        pitch       = bits.unpack(pitch_bits);    pitch      += start;    gain_index  = bits.unpack(gain_bits);        gain[0] = 0.015625f*(float)gain_cdbk[gain_index*3]+.5f;    gain[1] = 0.015625f*(float)gain_cdbk[gain_index*3+1]+.5f;    gain[2] = 0.015625f*(float)gain_cdbk[gain_index*3+2]+.5f;        if (count_lost != 0 && pitch > subframe_offset)    {      float gain_sum = Math.abs(gain[1]);      float tmp = count_lost < 4 ? last_pitch_gain : 0.4f * last_pitch_gain;      if (tmp>.95f)        tmp=.95f;      if (gain[0]>0)        gain_sum += gain[0];      else        gain_sum -= .5f*gain[0];      if (gain[2]>0)        gain_sum += gain[2];      else        gain_sum -= .5f*gain[0];      if (gain_sum > tmp) {        float fact = tmp/gain_sum;        for (i=0;i<3;i++)          gain[i]*=fact;      }    }    gain_val[0]=gain[0];    gain_val[1]=gain[1];    gain_val[2]=gain[2];    for (i=0;i<3;i++)    {      int j, tmp1, tmp2, pp=pitch+1-i;      tmp1=nsf;      if (tmp1>pp)        tmp1=pp;      tmp2=nsf;      if (tmp2>pp+pitch)        tmp2=pp+pitch;      for (j=0;j<tmp1;j++)        e[i][j]=exc[es+j-pp];      for (j=tmp1;j<tmp2;j++)        e[i][j]=exc[es+j-pp-pitch];      for (j=tmp2;j<nsf;j++)        e[i][j]=0;    }    for (i=0;i<nsf;i++) {      exc[es+i]=gain[0]*e[2][i]+gain[1]*e[1][i]+gain[2]*e[0][i];    }    return pitch;  }