aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-11-23 14:32:38 +0000
committerChristian Grothoff <christian@grothoff.org>2011-11-23 14:32:38 +0000
commit012a2fb048225012e3f07461ba4aa1238e78392f (patch)
tree58affd447f1170d2848ca4d467ade7ef989027e4
parentecfd00ad31f6f49013e7f4b756e4129db2bb60d1 (diff)
downloadgnunet-012a2fb048225012e3f07461ba4aa1238e78392f.tar.gz
gnunet-012a2fb048225012e3f07461ba4aa1238e78392f.zip
simpler alternative to the West algorithm to convince ourselves that we can still do averages...
-rw-r--r--src/nse/gnunet-service-nse.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/nse/gnunet-service-nse.c b/src/nse/gnunet-service-nse.c
index a0e7923ac..782f30514 100644
--- a/src/nse/gnunet-service-nse.c
+++ b/src/nse/gnunet-service-nse.c
@@ -308,14 +308,16 @@ setup_estimate_message (struct GNUNET_NSE_ClientMessage *em)
308 double std_dev; 308 double std_dev;
309 double variance; 309 double variance;
310 double val; 310 double val;
311 double weight; 311 double nsize;
312
313 /* Weighted incremental algorithm for stddev according to West (1979) */
314#if WEST
312 double sumweight; 315 double sumweight;
316 double weight;
313 double q; 317 double q;
314 double r; 318 double r;
315 double temp; 319 double temp;
316 double nsize;
317 320
318 /* Weighted incremental algorithm for stddev according to West (1979) */
319 mean = 0.0; 321 mean = 0.0;
320 sum = 0.0; 322 sum = 0.0;
321 sumweight = 0.0; 323 sumweight = 0.0;
@@ -335,6 +337,24 @@ setup_estimate_message (struct GNUNET_NSE_ClientMessage *em)
335 sumweight = temp; 337 sumweight = temp;
336 } 338 }
337 variance = sum / (sumweight - 1.0); 339 variance = sum / (sumweight - 1.0);
340#else
341 /* trivial version for debugging */
342 double vsq;
343
344 /* non-weighted trivial version */
345 sum = 0.0;
346 vsq = 0.0;
347 for (i = 0; i < estimate_count; i++)
348 {
349 val = htonl (size_estimate_messages
350 [(estimate_index - i +
351 HISTORY_SIZE) % HISTORY_SIZE].matching_bits);
352 sum += val;
353 vsq += val * val;
354 }
355 mean = sum / estimate_count;
356 variance = vsq + mean * mean - 2 * mean * sum; // terrible for numerical stability...
357#endif
338 GNUNET_assert (variance >= 0); 358 GNUNET_assert (variance >= 0);
339 std_dev = sqrt (variance); 359 std_dev = sqrt (variance);
340 current_std_dev = std_dev; 360 current_std_dev = std_dev;