diff --git a/include/asterisk/time.h b/include/asterisk/time.h
index fa8006e2a2135e05ad9a52de02b072573b08afb5..895d6df50357815b0d158f135a8eef8ed6b73a0a 100644
--- a/include/asterisk/time.h
+++ b/include/asterisk/time.h
@@ -171,7 +171,7 @@ struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec),
 AST_INLINE_API(
 struct timeval ast_samp2tv(unsigned int _nsamp, unsigned int _rate),
 {
-	return ast_tv(_nsamp / _rate, (_nsamp % _rate) * (1000000 / (float) _rate));
+	return ast_tv(_nsamp / _rate, ((_nsamp % _rate) * (4000000 / _rate)) / 4); /* this calculation is accurate up to 32000Hz. */
 }
 )