Issue #23646: Enhance precision of time.sleep() and socket timeout when
interrupted by a signal

Add a new _PyTime_AddDouble() function and remove _PyTime_ADD_SECONDS() macro.
The _PyTime_ADD_SECONDS only supported an integer number of seconds, the
_PyTime_AddDouble() has subsecond resolution.
diff --git a/Python/pytime.c b/Python/pytime.c
index cdaa22e..894008d 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -367,6 +367,23 @@
     return _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round);
 }
 
+void
+_PyTime_AddDouble(_PyTime_timeval *tv, double interval, _PyTime_round_t round)
+{
+    _PyTime_timeval tv2;
+    double frac;
+
+    frac = fmod(interval, 1.0);
+    interval = floor(interval);
+    tv2.tv_sec = (long)interval;
+    tv2.tv_usec = (long)(frac*1e6);
+
+    tv->tv_sec += tv2.tv_sec;
+    tv->tv_usec += tv2.tv_usec;
+    tv->tv_sec += (time_t)(tv->tv_usec / 1000000);
+    tv->tv_usec %= 1000000;
+}
+
 int
 _PyTime_Init(void)
 {