Fixed stored number accuracy (#9540)
Improved stored number accuracy
Stelios Fragkakis committed
Jul 14, 2020 at 18:32 UTC
790d19760537cf43348de8db2322a15ced2511cc
2 files changed
+7
libnetdata/storage_number/storage_number.c
+4
@@ -61,6 +61,10 @@ storage_number pack_storage_number(calculated_number value, uint32_t flags) {
61
m++;
62
}
63
64
+ if (unlikely(n > (calculated_number) (0x00ffffff))) {
65
+ n /= 10;
66
+ m--;
67
+ }
68
// the value was small enough and we multiplied it
69
// so we add a divider to unpack it
70
r += (0 << 30) + (m << 27); // the divider m
libnetdata/storage_number/tests/test_storage_number.c
+3
@@ -37,6 +37,9 @@ static void test_number_pinting(void **state)
37
38
print_calculated_number(value, -9999.9999999);
39
assert_string_equal(value, "-9999.9999999");
40
+
41
+ print_calculated_number(value, unpack_storage_number(pack_storage_number(16.777218L, SN_EXISTS)));
42
+ assert_string_equal(value, "16.77722");
43
}
44
45
int main(void)