code: func (d *Decoder) DecodeFloat() (float32, int, error) {
  	var buf [4]byte
  	n, err := io.ReadFull(d.r, buf[:])
  	if err != nil {
  		msg := fmt.Sprintf(errIODecode, err.Error(), 4)
  		err := unmarshalError("DecodeFloat", ErrIO, msg, buf[:n], err)
  		return 0, n, err
  	}
  
  	val := uint32(buf[3]) | uint32(buf[2])<<8 |
  		uint32(buf[1])<<16 | uint32(buf[0])<<24
  	return math.Float32frombits(val), n, nil
  }
docs: // DecodeFloat treats the next 4 bytes as an XDR encoded floating point and
  // returns the result as a float32 along with the number of bytes actually read.
  //
  // An UnmarshalError is returned if there are insufficient bytes remaining.
  //
  // Reference:
  // 	RFC Section 4.6 - Floating Point
  // 	32-bit single-precision IEEE 754 floating point