diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-11-23 14:32:38 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-11-23 14:32:38 +0000 |
commit | 012a2fb048225012e3f07461ba4aa1238e78392f (patch) | |
tree | 58affd447f1170d2848ca4d467ade7ef989027e4 | |
parent | ecfd00ad31f6f49013e7f4b756e4129db2bb60d1 (diff) | |
download | gnunet-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.c | 26 |
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; |