simpler float decoding to parallel simpler float encoding. Interface uses only a double
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index e1a0e0c..78ecf9f 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -504,14 +504,16 @@
          break;
            
       case HALF_PREC_FLOAT:
-         pDecodedItem->val.fnum  = IEEE754_HalfToFloat((uint16_t)uNumber);
-         pDecodedItem->uDataType = QCBOR_TYPE_FLOAT;
+         pDecodedItem->val.dfnum = IEEE754_HalfToDouble((uint16_t)uNumber);
+         pDecodedItem->uDataType = QCBOR_TYPE_DOUBLE;
          break;
       case SINGLE_PREC_FLOAT:
-         pDecodedItem->val.fnum = UsefulBufUtil_CopyUint32ToFloat((uint32_t)uNumber);
+         pDecodedItem->val.dfnum = (double)UsefulBufUtil_CopyUint32ToFloat((uint32_t)uNumber);
+         pDecodedItem->uDataType = QCBOR_TYPE_DOUBLE;
          break;
       case DOUBLE_PREC_FLOAT:
          pDecodedItem->val.dfnum = UsefulBufUtil_CopyUint64ToDouble(uNumber);
+         pDecodedItem->uDataType = QCBOR_TYPE_DOUBLE;
          break;
          
       case CBOR_SIMPLEV_FALSE: // 20
@@ -605,7 +607,7 @@
    }
    UsefulBufC Temp          = pDecodedItem->val.string;
    pDecodedItem->val.bigNum = Temp;
-   pDecodedItem->uDataType  = pDecodedItem->uTagBits & QCBOR_TAGFLAG_POS_BIGNUM ? QCBOR_TYPE_POSBIGNUM : QCBOR_TYPE_NEGBIGNUM; // TODO: check this
+   pDecodedItem->uDataType  = pDecodedItem->uTagBits & QCBOR_TAGFLAG_POS_BIGNUM ? QCBOR_TYPE_POSBIGNUM : QCBOR_TYPE_NEGBIGNUM;
    return QCBOR_SUCCESS;
 }
 
@@ -619,7 +621,6 @@
    int nReturn = QCBOR_SUCCESS;
    
    pDecodedItem->val.epochDate.fSecondsFraction = 0;
-   double d = pDecodedItem->val.dfnum; // Might not use this, but keeps code flow neater below
    
    switch (pDecodedItem->uDataType) {
          
@@ -635,17 +636,16 @@
          pDecodedItem->val.epochDate.nSeconds = pDecodedItem->val.uint64;
          break;
          
-      case QCBOR_TYPE_FLOAT:
-         d = pDecodedItem->val.fnum;
-         // Fall through
-         
       case QCBOR_TYPE_DOUBLE:
-         if(d > INT64_MAX) {
-            nReturn = QCBOR_ERR_DATE_OVERFLOW;
-            goto Done;
+         {
+            const double d = pDecodedItem->val.dfnum;
+            if(d > INT64_MAX) {
+               nReturn = QCBOR_ERR_DATE_OVERFLOW;
+               goto Done;
+            }
+            pDecodedItem->val.epochDate.nSeconds = d; // Float to integer conversion happening here.
+            pDecodedItem->val.epochDate.fSecondsFraction = d - pDecodedItem->val.epochDate.nSeconds;
          }
-         pDecodedItem->val.epochDate.nSeconds = d; // Float to integer conversion happening here.
-         pDecodedItem->val.epochDate.fSecondsFraction = d - pDecodedItem->val.epochDate.nSeconds;
          break;
          
       default: