From a1409d1432ea4280293749b3a2bb5c2278fda609 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 16 Oct 2017 23:48:26 -0400 Subject: [PATCH] redo time.monotonic() to avoid double precision --- shared-bindings/time/__init__.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 105758951f..6956cc4e65 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -52,7 +52,9 @@ //| :rtype: float //| STATIC mp_obj_t time_monotonic(void) { - return mp_obj_new_float(common_hal_time_monotonic() / 1000.0); + uint64_t time64 = common_hal_time_monotonic(); + // 4294967296 = 2^32 + return mp_obj_new_float(((uint32_t) (time64 >> 32) * 4294967296.0f + (uint32_t) (time64 & 0xffffffff)) / 1000.0f); } MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_obj, time_monotonic);