]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
if the values allow it, avoid floting point math for the current speed
authorDaniel Stenberg <daniel@haxx.se>
Wed, 5 May 2004 07:45:21 +0000 (07:45 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 5 May 2004 07:45:21 +0000 (07:45 +0000)
lib/progress.c

index e7e5728eff19e14428873e3b7757da436a9fea06..51333aff13686cbebb27bcc60ff947c78032b5bd 100644 (file)
@@ -301,10 +301,21 @@ int Curl_pgrsUpdate(struct connectdata *conn)
     if(0 == span_ms)
       span_ms=1; /* at least one millisecond MUST have passed */
 
-    /* Calculate the average speed the last 'countindex' seconds */
-    data->progress.current_speed = (curl_off_t)
-      (data->progress.speeder[nowindex]-
-       data->progress.speeder[checkindex])/((double)span_ms/1000);
+    /* Calculate the average speed the last 'span_ms' milliseconds */
+    {
+      curl_off_t amount = data->progress.speeder[nowindex]-
+        data->progress.speeder[checkindex];
+
+      if(amount > 0xffffffff/1000)
+        /* the 'amount' value is bigger than would fit in 32 bits if
+           multiplied with 1000, so we use the double math for this */
+        data->progress.current_speed = (curl_off_t)
+          (amount/(span_ms/1000.0));
+      else
+        /* the 'amount' value is small enough to fit within 32 bits even
+           when multiplied with 1000 */
+        data->progress.current_speed = amount*1000/span_ms;
+    }
   }
   else
     /* the first second we use the main average */