From 9d7a72525b8a08f16d1c711fc6cbd267bb5ee9ee Mon Sep 17 00:00:00 2001 From: Julius Bünger Date: Mon, 9 Apr 2018 20:43:17 +0200 Subject: rps profiler: improve computation of sampling probability --- src/rps/test_rps.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/rps/test_rps.c') diff --git a/src/rps/test_rps.c b/src/rps/test_rps.c index b46fc0c1e..2b5e4a8c3 100644 --- a/src/rps/test_rps.c +++ b/src/rps/test_rps.c @@ -1870,7 +1870,10 @@ static uint32_t fac (uint32_t x) static uint32_t binom (uint32_t n, uint32_t k) { - GNUNET_assert (n >= k); + //GNUNET_assert (n >= k); + if (k > n) return 0; + if (0 > n) return 0; + if (0 > k) return 0; if (0 == k) return 1; return fac (n) / @@ -1984,11 +1987,13 @@ static void compute_probabilities (uint32_t peer_idx) prob_push = 0; } /* 2. Probability of peer i being contained in pulls */ - // FIXME this computation is not yet correct view_size = rps_peers[peer_idx].cur_view_count; cont_views = count_containing_views (i, peer_idx); - prob_pull = 1.0 - - (1.0 / binom (view_size, 0.45 * view_size)); + prob_pull = 1.0 + / + (binom (view_size, 0.45 * view_size) - + binom (view_size - cont_views, 0.45 * view_size)); + if (0 == cont_views) prob_pull = 0; probs[i] = prob_push + prob_pull - (prob_push * prob_pull); if (0 != probs[i]) count_non_zero_prob++; -- cgit v1.2.3