]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tvdiff_secs(): sub-zero time difference adjustment
authorYang Tse <yangsita@gmail.com>
Fri, 25 Nov 2011 12:51:55 +0000 (13:51 +0100)
committerYang Tse <yangsita@gmail.com>
Fri, 25 Nov 2011 12:51:55 +0000 (13:51 +0100)
Skip a floating point addition operation when integral part of time difference
is zero. This avoids potential floating point addition rounding problems while
preserving decimal part value.

lib/timeval.c
src/tool_util.c
tests/libtest/testutil.c

index cb39308e0d2f09a635d293e4341a89df60b85a74..2fd72014481451916e7337ec0cef22e5939adb56 100644 (file)
@@ -120,8 +120,11 @@ long curlx_tvdiff(struct timeval newer, struct timeval older)
  */
 double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
 {
-  return (double)(newer.tv_sec-older.tv_sec)+
-    (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  if(newer.tv_sec != older.tv_sec)
+    return (double)(newer.tv_sec-older.tv_sec)+
+      (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  else
+    return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
 }
 
 /* return the number of seconds in the given input timeval struct */
index 79c998295898d6f0cea40979e6054c6612b5cf95..93ab17fd49b70867977f0016ab17d76b10a3ef5d 100644 (file)
@@ -123,8 +123,11 @@ long tool_tvdiff(struct timeval newer, struct timeval older)
  */
 double tool_tvdiff_secs(struct timeval newer, struct timeval older)
 {
-  return (double)(newer.tv_sec-older.tv_sec)+
-    (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  if(newer.tv_sec != older.tv_sec)
+    return (double)(newer.tv_sec-older.tv_sec)+
+      (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  else
+    return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
 }
 
 /* return the number of seconds in the given input timeval struct */
index 63393c589c826186c4d944f0264b4f0d167dd431..4ee488e71590593be9b2f9705b09bcb820eb9691 100644 (file)
@@ -123,8 +123,11 @@ long tutil_tvdiff(struct timeval newer, struct timeval older)
  */
 double tutil_tvdiff_secs(struct timeval newer, struct timeval older)
 {
-  return (double)(newer.tv_sec-older.tv_sec)+
-    (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  if(newer.tv_sec != older.tv_sec)
+    return (double)(newer.tv_sec-older.tv_sec)+
+      (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+  else
+    return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
 }
 
 /* return the number of seconds in the given input timeval struct */