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