public float parseFloat() throws IOException {
 
        int sign = 1;
    
        int c = nextNonWhitespace();
        if( c == '+' ) {
            // Unclear if whitespace is allowed here or not
            c = read();
        } else if( c == '-' ) {
            sign = -1;
            // Unclear if whitespace is allowed here or not
            c = read();
        }
            
        if( c == '0' ) {
            int d = read();
            if( d == 'x' || d == 'X' ) {
                int val = (int)parseIntString(16, "hexidecimal");
                return Float.intBitsToFloat(val) * sign;
            } else if( d == 'b' || d == 'B' ) {
                return Float.intBitsToFloat((int)parseIntString(1, "binary")) * sign;
            } else {
                pushBack(d);               
            }     
        }
        
        // If we got here then we didn't use the original character
        // we read at the top of the method... or the one we read to
        // replace it
        pushBack(c);
 
        // Else read the number while we have digits
        float result = (float)(parseFloatString() * sign);
        return result;
    }