diff --git a/src/xpdev/genwrap.c b/src/xpdev/genwrap.c
index 559d7c18093ac32bf443c6da4fbb7b553d1cb476..196924e65b892d0b4227680b549fd638bf0da19b 100644
--- a/src/xpdev/genwrap.c
+++ b/src/xpdev/genwrap.c
@@ -514,7 +514,9 @@ long double	DLLCALL	xp_timer(void)
 		ret=((long double)tick.HighPart*4294967296)+((long double)tick.LowPart);
 		ret /= ((long double)freq.HighPart*4294967296)+((long double)freq.LowPart);
 #else
-		ret=((long double)tick.QuadPart)/freq.QuadPart;
+		/* In MSVC, a long double does NOT have 19 decimals of precision */
+		ret=((long int)(tick.QuadPart/freq.QuadPart))
+				+(((long double)(tick.QuadPart%freq.QuadPart))/freq.QuadPart);
 #endif
 	}
 	else {