public void readFNum(){
  float f=0;
  boolean neg=false;
  int exp=0;
  int eval=0;
  float mul=1;
  byte work=data[pos++];
  while (true) {
    if (work == (byte)0xdd) {
      work=data[pos++];
    }
    int nyb=(work >> 4) & 0xf;
    work=(byte)((work << 4) | 0xd);
    if (nyb < 10) {
      if (exp != 0) {
        eval=eval * 10 + nyb;
      }
 else       if (mul == 1) {
        f=f * 10 + nyb;
      }
 else {
        f+=nyb * mul;
        mul/=10f;
      }
    }
 else     if (nyb == 0xa) {
      mul=0.1f;
    }
 else     if (nyb == 0xb) {
      exp=1;
    }
 else     if (nyb == 0xc) {
      exp=-1;
    }
 else     if (nyb == 0xe) {
      neg=true;
    }
 else {
      break;
    }
  }
  fnum=(neg ? -1 : 1) * f * (float)Math.pow(10,eval * exp);
}

public void readFNum ( ) { float f = 0 ; boolean neg = false ; int exp = 0 ; int eval = 0 ; float mul = 1 ; byte work = data [ pos ++ ] ; while ( true ) { if ( work == ( byte ) 0xdd ) { work = data [ pos ++ ] ; } int nyb = ( work > > 4 ) & 0xf ; work = ( byte ) ( ( work << 4 ) | 0xd ) ; if ( nyb < 10 ) { if ( exp != 0 ) { eval = eval * 10 + nyb ; } else if ( mul == 1 ) { f = f * 10 + nyb ; } else { f += nyb * mul ; mul /= 10f ; } } else if ( nyb == 0xa ) { mul = 0.1f ; } else if ( nyb == 0xb ) { exp = 1 ; } else if ( nyb == 0xc ) { exp = - 1 ; } else if ( nyb == 0xe ) { neg = true ; } else { break ; } } fnum = ( neg ? - 1 : 1 ) * f * ( float ) Math . pow ( 10 , eval * exp ) ; }
read the next funky floating point number from the input stream . value gets put into the fnum field .
