Floats consists of [encoding/INT]-encoded mantissa "m" and
base-2 exponent "e": m * pow(2,e).

Normalised values *must* be used.
Separate tag's values are used for representing NaN and infinite
numbers. Zero is represented as zero mantissa and exponent.

            NaN = '_'
           +inf = '>'
           -inf = '<'
    float(m, e) = '~' || INT(m) || INT(e)
            0.0 = float(0, 0)

That representation is far from being compact.
Sending binary IEEE754 may be more preferable.

Example representations:

NaN                              | 5F
+inf                             | 3E
-inf                             | 3C
0.0                              | 7E 2B80   2B80
45.25   m=181 e=-2               | 7E 2B81B5 2D8101
-45.25  m=-181 e=-2              | 7E 2D81B4 2D8101
0.125   m=1 e=-3                 | 7E 2B8101 2D8102
0.15625 m=5 e=-5                 | 7E 2B8105 2D8104
123.456 m=8687443681197687 e=-46 | 7E 2B871EDD2F1A9FBE77 2D812D