~ chicken-core (chicken-5) cb22c92c6786281e6885ab488138dcb35b31c945


commit cb22c92c6786281e6885ab488138dcb35b31c945
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sun Jul 24 22:30:20 2011 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sun Jul 24 22:30:20 2011 +0200

    floor ms values when returned as flonum

diff --git a/runtime.c b/runtime.c
index 578e469f..4632169e 100644
--- a/runtime.c
+++ b/runtime.c
@@ -1647,12 +1647,13 @@ C_regparm double C_fcall C_milliseconds(void)
 {
 #ifdef C_NONUNIX
     if(CLOCKS_PER_SEC == 1000) return clock();
-    else return ((double)clock() / (double)CLOCKS_PER_SEC) * 1000;
+    else return C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000);
 #else
     struct timeval tv;
 
     if(C_gettimeofday(&tv, NULL) == -1) return 0;
-    else return ((double)tv.tv_sec - C_startup_time_seconds) * 1000.0 + tv.tv_usec / 1000;
+    else return 
+	   C_floor(((double)tv.tv_sec - C_startup_time_seconds) * 1000.0 + tv.tv_usec / 1000);
 #endif
 }
 
@@ -1684,13 +1685,14 @@ C_regparm double C_fcall C_cpu_milliseconds(void)
 {
 #if defined(C_NONUNIX) || defined(__CYGWIN__)
     if(CLOCKS_PER_SEC == 1000) return clock();
-    else return ((double)clock() / (double)CLOCKS_PER_SEC) * 1000;
+    else return C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000);
 #else
     struct rusage ru;
 
     if(C_getrusage(RUSAGE_SELF, &ru) == -1) return 0;
-    else return ((double)ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) * 1000
-	   + ((double)ru.ru_utime.tv_usec + ru.ru_stime.tv_usec) / 1000;
+    else return 
+	   C_floor(((double)ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) * 1000
+		   + ((double)ru.ru_utime.tv_usec + ru.ru_stime.tv_usec) / 1000);
 #endif
 }
 
@@ -8251,14 +8253,14 @@ C_a_i_cpu_time(C_word **a, int c, C_word buf)
 
 #if defined(C_NONUNIX) || defined(__CYGWIN__)
   if(CLOCKS_PER_SEC == 1000) u = clock();
-  else u = C_number(a, ((double)clock() / (double)CLOCKS_PER_SEC) * 1000);
+  else u = C_number(a, C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000));
 #else
   struct rusage ru;
 
   if(C_getrusage(RUSAGE_SELF, &ru) == -1) u = 0;
   else {
-    u = C_number(a, (double)ru.ru_utime.tv_sec * 1000 + ru.ru_utime.tv_usec / 1000);
-    s = C_number(a, (double)ru.ru_stime.tv_sec * 1000 + ru.ru_stime.tv_usec / 1000);
+    u = C_number(a, C_floor((double)ru.ru_utime.tv_sec * 1000 + ru.ru_utime.tv_usec / 1000));
+    s = C_number(a, C_floor((double)ru.ru_stime.tv_sec * 1000 + ru.ru_stime.tv_usec / 1000));
   }
 #endif
 
Trap