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