chrony: fix conversion of very small floating-poing values
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 23 Feb 2017 11:56:30 +0000 (12:56 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 23 Feb 2017 14:39:37 +0000 (15:39 +0100)
This is copied from the chrony code.

src/chrony.c

index 0733e13..6cf2914 100644 (file)
@@ -584,9 +584,10 @@ static double ntohf(tFloat p_float) {
   uint32_t uval;
 
   uval = ntohl(p_float.value);
-  exp = (uval >> FLOAT_COEF_BITS) - FLOAT_COEF_BITS;
+  exp = (uval >> FLOAT_COEF_BITS);
   if (exp >= 1 << (FLOAT_EXP_BITS - 1))
     exp -= 1 << FLOAT_EXP_BITS;
+  exp -= FLOAT_COEF_BITS;
 
   /* coef = (x << FLOAT_EXP_BITS) >> FLOAT_EXP_BITS; */
   coef = uval % (1U << FLOAT_COEF_BITS);