The log10() call used for automatic quantile nines calculation returns
a double result. Cast it to an int.

  The exp10() call used in stats_quantiles_calc() for checking purposes
returns a double result which is compared against a long. Cast it to a long.

  This allows the following comparison

        data->size < (long)exp10(quantiles->nines)

  to really be false when quantiles->nines has been calculated as

        log10(data->size)

  More generally, it seems that (at least with gcc 4.1.1):

        long i = 10000;
        double f = exp10(log10(i))

        yields (i < f) being true due to rounding.

Signed-off-by: Sebastien Dugue <[EMAIL PROTECTED]>
Cc: Darren Hart <[EMAIL PROTECTED]>
Cc: Tim Chavez <[EMAIL PROTECTED]>
---
 .../realtime/func/gtod_latency/gtod_latency.c      |    2 +-
 .../realtime/func/hrtimer-prio/hrtimer-prio.c      |    2 +-
 .../func/periodic_cpu_load/periodic_cpu_load.c     |    2 +-
 .../periodic_cpu_load/periodic_cpu_load_single.c   |    2 +-
 testcases/realtime/func/pi_perf/pi_perf.c          |    2 +-
 .../pthread_kill_latency/pthread_kill_latency.c    |    2 +-
 .../realtime/func/sched_latency/sched_latency.c    |    2 +-
 testcases/realtime/lib/libstats.c                  |    2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/testcases/realtime/func/gtod_latency/gtod_latency.c 
b/testcases/realtime/func/gtod_latency/gtod_latency.c
index 9c62d76..e8cea30 100644
--- a/testcases/realtime/func/gtod_latency/gtod_latency.c
+++ b/testcases/realtime/func/gtod_latency/gtod_latency.c
@@ -226,7 +226,7 @@ int main(int argc, char *argv[])
 
        stats_container_init(&dat, ITERATIONS);
        stats_container_init(&hist, HIST_BUCKETS);
-       stats_quantiles_init(&quantiles, log10(ITERATIONS));
+       stats_quantiles_init(&quantiles, (int)log10(ITERATIONS));
        setup();
 
        if (stats_cmdline(argc, argv) < 0) {
diff --git a/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c 
b/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
index 91c6759..66ff5c3 100644
--- a/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
+++ b/testcases/realtime/func/hrtimer-prio/hrtimer-prio.c
@@ -185,7 +185,7 @@ int main(int argc, char *argv[])
        stats_quantiles_t quantiles;
        stats_container_init(&dat, iterations);
        stats_container_init(&hist, HIST_BUCKETS);
-       stats_quantiles_init(&quantiles, log10(iterations));
+       stats_quantiles_init(&quantiles, (int)log10(iterations));
 
        t_id = create_fifo_thread(timer_thread, NULL, high_prio);
        if (t_id == -1) {
diff --git a/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load.c 
b/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load.c
index 935a058..1eb0425 100644
--- a/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load.c
+++ b/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load.c
@@ -196,7 +196,7 @@ int main(int argc, char *argv[])
 
        for (i=0; i<(THREADS_PER_GROUP * NUM_GROUPS); i++) {
                stats_container_init(&dat[i], ITERATIONS);
-               stats_quantiles_init(&quantiles[i], log10(ITERATIONS));
+               stats_quantiles_init(&quantiles[i], (int)log10(ITERATIONS));
        }
 
        struct periodic_arg parg_a = {PERIOD_A, ITERATIONS, calc, (void 
*)CALC_LOOPS_A };
diff --git 
a/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load_single.c 
b/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load_single.c
index c5bb3d5..56ec680 100644
--- a/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load_single.c
+++ b/testcases/realtime/func/periodic_cpu_load/periodic_cpu_load_single.c
@@ -102,7 +102,7 @@ int periodic_thread(nsec_t period, int iterations, int 
loops)
 
        stats_container_init(&dat, iterations);
        stats_container_init(&hist, HIST_BUCKETS);
-       stats_quantiles_init(&quantiles, log10(iterations));
+       stats_quantiles_init(&quantiles, (int)log10(iterations));
        asprintf(&samples_filename, "%s-samples", filename_prefix);
        asprintf(&hist_filename, "%s-hist", filename_prefix);
 
diff --git a/testcases/realtime/func/pi_perf/pi_perf.c 
b/testcases/realtime/func/pi_perf/pi_perf.c
index d89fa62..54f3f5f 100644
--- a/testcases/realtime/func/pi_perf/pi_perf.c
+++ b/testcases/realtime/func/pi_perf/pi_perf.c
@@ -171,7 +171,7 @@ void * high_prio_thread(void *arg)
        stats_container_init(&high_dat, iterations);
        stats_container_init(&wait_dat, iterations);
        stats_container_init(&wait_hist, HIST_BUCKETS);
-       stats_quantiles_init(&wait_quantiles, log10(iterations));
+       stats_quantiles_init(&wait_quantiles, (int)log10(iterations));
 
        printf("High prio thread started\n");
 
diff --git 
a/testcases/realtime/func/pthread_kill_latency/pthread_kill_latency.c 
b/testcases/realtime/func/pthread_kill_latency/pthread_kill_latency.c
index 96a261b..518bd2f 100644
--- a/testcases/realtime/func/pthread_kill_latency/pthread_kill_latency.c
+++ b/testcases/realtime/func/pthread_kill_latency/pthread_kill_latency.c
@@ -125,7 +125,7 @@ void *signal_receiving_thread(void *arg)
 
        stats_container_init(&dat, ITERATIONS);
        stats_container_init(&hist, HIST_BUCKETS);
-       stats_quantiles_init(&quantiles, log10(ITERATIONS));
+       stats_quantiles_init(&quantiles, (int)log10(ITERATIONS));
 
        debug(DBG_DEBUG, "Signal receiving thread running\n");
 
diff --git a/testcases/realtime/func/sched_latency/sched_latency.c 
b/testcases/realtime/func/sched_latency/sched_latency.c
index b91f40b..b7ba74b 100644
--- a/testcases/realtime/func/sched_latency/sched_latency.c
+++ b/testcases/realtime/func/sched_latency/sched_latency.c
@@ -270,7 +270,7 @@ int main(int argc, char *argv[])
        }
 
        /* use the highest value for the quantiles */
-       if (stats_quantiles_init(&quantiles, log10(iterations))) {
+       if (stats_quantiles_init(&quantiles, (int)log10(iterations))) {
                stats_container_free(&hist);
                stats_container_free(&dat);
                exit(1);
diff --git a/testcases/realtime/lib/libstats.c 
b/testcases/realtime/lib/libstats.c
index 75aba14..8ae8dba 100644
--- a/testcases/realtime/lib/libstats.c
+++ b/testcases/realtime/lib/libstats.c
@@ -205,7 +205,7 @@ int stats_quantiles_calc(stats_container_t *data, 
stats_quantiles_t *quantiles)
        int index;
 
        // check for sufficient data size of accurate calculation
-       if (data->size <= 0 || data->size < exp10(quantiles->nines)) {
+       if (data->size <= 0 || data->size < (long)exp10(quantiles->nines)) {
                //printf("ERROR: insufficient data size for %d nines\n", 
data->size);
                return -1;
        }
-- 
1.5.4.rc2.84.gf85fd-dirty


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to