reduce float code size; remote AddFloatAsSmallset
diff --git a/src/ieee754.c b/src/ieee754.c
index e221f3d..aba7f32 100644
--- a/src/ieee754.c
+++ b/src/ieee754.c
@@ -403,20 +403,20 @@
     // Optimizer will re organize so there is only one call to IEEE754_FloatToHalf()
     if(uSingle == 0) {
         // Value is 0.0000, not a a subnormal
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else if(nSingleExponent == SINGLE_EXPONENT_INF_OR_NAN) {
         // NaN, +/- infinity
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else if((nSingleExponent >= HALF_EXPONENT_MIN) && nSingleExponent <= HALF_EXPONENT_MAX && (!(uSingleSignificand & uDroppedSingleBits))) {
         // Normal number in exponent range and precision won't be lost
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_FloatToHalf(f);
+        result.uSize = IEEE754_UNION_IS_HALF;
+        result.uValue  = IEEE754_FloatToHalf(f);
     } else {
         // Subnormal, exponent out of range, or precision will be lost
-        result.uTag = IEEE754_UNION_IS_SINGLE;
-        result.u32  = uSingle;
+        result.uSize = IEEE754_UNION_IS_SINGLE;
+        result.uValue  = uSingle;
     }
     
     return result;
@@ -439,24 +439,24 @@
     // The various cases
     if(d == 0.0) { // Take care of positive and negative zero
         // Value is 0.0000, not a a subnormal
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if(nDoubleExponent == DOUBLE_EXPONENT_INF_OR_NAN) {
         // NaN, +/- infinity
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if(bAllowHalfPrecision && (nDoubleExponent >= HALF_EXPONENT_MIN) && nDoubleExponent <= HALF_EXPONENT_MAX && (!(uDoubleSignificand & uDroppedDoubleBits))) {
         // Can convert to half without precision loss
-        result.uTag = IEEE754_UNION_IS_HALF;
-        result.u16  = IEEE754_DoubleToHalf(d);
+        result.uSize  = IEEE754_UNION_IS_HALF;
+        result.uValue = IEEE754_DoubleToHalf(d);
     } else if((nDoubleExponent >= SINGLE_EXPONENT_MIN) && nDoubleExponent <= SINGLE_EXPONENT_MAX && (!(uDoubleSignificand & uDroppedSingleBits))) {
         // Can convert to single without precision loss
-        result.uTag = IEEE754_UNION_IS_SINGLE;
-        result.u32  = CopyFloatToUint32((float)d);
+        result.uSize  = IEEE754_UNION_IS_SINGLE;
+        result.uValue = CopyFloatToUint32((float)d);
     } else {
         // Can't convert without precision loss
-        result.uTag = IEEE754_UNION_IS_DOUBLE;
-        result.u64  = uDouble;
+        result.uSize  = IEEE754_UNION_IS_DOUBLE;
+        result.uValue = uDouble;
     }
     
     return result;
diff --git a/src/ieee754.h b/src/ieee754.h
index 124d095..5cd36db 100644
--- a/src/ieee754.h
+++ b/src/ieee754.h
@@ -141,18 +141,14 @@
 
 
 
-
-#define IEEE754_UNION_IS_HALF   0
-#define IEEE754_UNION_IS_SINGLE 1
-#define IEEE754_UNION_IS_DOUBLE 2
+// Both tags the value and gives the size
+#define IEEE754_UNION_IS_HALF   2
+#define IEEE754_UNION_IS_SINGLE 4
+#define IEEE754_UNION_IS_DOUBLE 8
 
 typedef struct {
-    uint8_t uTag;  // One of IEEE754_IS_xxxx
-    union {
-        uint16_t u16;
-        uint32_t u32;
-        uint64_t u64;
-    };
+    uint8_t uSize;  // One of IEEE754_IS_xxxx
+    uint64_t uValue;
 } IEEE754_union;
 
 
diff --git a/src/qcbor_encode.c b/src/qcbor_encode.c
index 93f7203..3d88739 100644
--- a/src/qcbor_encode.c
+++ b/src/qcbor_encode.c
@@ -561,17 +561,7 @@
 
 static void QCBOREncode_AddFUnionAsSmallest_2(QCBOREncodeContext *me, const char *szLabel, int64_t nLabel, IEEE754_union uNum)
 {
-   switch(uNum.uTag) {
-      case IEEE754_UNION_IS_HALF:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint16_t), uNum.u16);
-         break;
-      case IEEE754_UNION_IS_SINGLE:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint32_t), uNum.u32);
-         break;
-      case IEEE754_UNION_IS_DOUBLE:
-         QCBOREncode_AddType7_2(me, szLabel, nLabel, sizeof(uint64_t), uNum.u64);
-         break;
-   }
+   QCBOREncode_AddType7_2(me, szLabel, nLabel, uNum.uSize, uNum.uValue);
 }
 
 void QCBOREncode_AddFloatAsSmallest_2(QCBOREncodeContext *me, const char *szLabel, int64_t nLabel, float fNum)