From 7db8c19d0e7ea91bee71e2fd6cb035568223ff05 Mon Sep 17 00:00:00 2001 From: compudj Date: Mon, 16 Aug 2004 04:35:08 +0000 Subject: [PATCH] tweak time_x_double git-svn-id: http://ltt.polymtl.ca/svn@789 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/ltt/time.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ltt/branches/poly/ltt/time.h b/ltt/branches/poly/ltt/time.h index 6ab53fca..483e2e58 100644 --- a/ltt/branches/poly/ltt/time.h +++ b/ltt/branches/poly/ltt/time.h @@ -29,10 +29,17 @@ typedef struct _LttTime { #define NANOSECONDS_PER_SECOND 1000000000 + +/* We give the DIV and MUL constants so we can always multiply, for a + * division as well as a multiplication of NANOSECONDS_PER_SECOND */ /* 2^30/1.07374182400631629848 = 1000000000.0 */ -#define DOUBLE_SHIFT_CONST 1.07374182400631629848 +#define DOUBLE_SHIFT_CONST_DIV 1.07374182400631629848 #define DOUBLE_SHIFT 30 +/* 2^30*0.93132257461547851562 = 1000000000.0000000000 */ +#define DOUBLE_SHIFT_CONST_MUL 0.93132257461547851562 + + /* 1953125 * 2^9 = NANOSECONDS_PER_SECOND */ #define LTT_TIME_UINT_SHIFT_CONST 1953125 #define LTT_TIME_UINT_SHIFT 9 @@ -109,7 +116,7 @@ static inline double ltt_time_to_double(LttTime t1) g_warning("Precision loss in conversion LttTime to double"); #endif //EXTRA_CHECK return ((double)((guint64)t1.tv_sec<> DOUBLE_SHIFT; + res.tv_sec = (guint64)(t1 * DOUBLE_SHIFT_CONST_DIV) >> DOUBLE_SHIFT; res.tv_nsec = (t1 - (((guint64)res.tv_sec<