diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
index 8a70847e1e9dbe9882e46336b78cdb83d6196136..d4ef86c5a49b9ac38e3604596166737515dc1ed5 100644
--- a/src/sdl/i_system.c
+++ b/src/sdl/i_system.c
@@ -2044,12 +2044,20 @@ ticcmd_t *I_BaseTiccmd2(void)
 //
 
 static Uint64 timer_frequency;
+
+static double tic_frequency;
 static Uint64 tic_epoch;
 
 tic_t I_GetTime(void)
 {
+	static double elapsed;
+
 	const Uint64 now = SDL_GetPerformanceCounter();
-	return (now - tic_epoch) * NEWTICRATE / timer_frequency;
+
+	elapsed += (now - tic_epoch) / tic_frequency;
+	tic_epoch = now; // moving epoch
+
+	return (tic_t)elapsed;
 }
 
 precise_t I_GetPreciseTime(void)
@@ -2069,6 +2077,8 @@ void I_StartupTimer(void)
 {
 	timer_frequency = SDL_GetPerformanceFrequency();
 	tic_epoch       = SDL_GetPerformanceCounter();
+
+	tic_frequency   = timer_frequency / NEWTICRATE;
 }
 
 void I_Sleep(void)