|
@@ -1233,6 +1233,16 @@ IMPLEMENT_ORDER_FUNC(find_nth_long, long)
|
|
|
digestset_t *
|
|
|
digestset_new(int max_elements)
|
|
|
{
|
|
|
+ /* The probability of false positivies is about P=(1 - exp(-kn/m))^k, where k
|
|
|
+ * is the number of hash functions per entry, m is the bits in the array,
|
|
|
+ * and n is the number of elements inserted. For us, k==4, n<=max_elements,
|
|
|
+ * and m==n_bits= approximately max_elements*32. This gives
|
|
|
+ * P<(1-exp(-4*n/(32*n)))^4 == (1-exp(1/-8))^4 == .00019
|
|
|
+ *
|
|
|
+ * It would be more optimal in space vs false positives to get this false
|
|
|
+ * positive rate by going for k==13, and m==18.5n, but we also want to
|
|
|
+ * conserve CPU, and k==13 is pretty big.
|
|
|
+ */
|
|
|
int n_bits = 1u << (tor_log2(max_elements)+5);
|
|
|
digestset_t *r = tor_malloc(sizeof(digestset_t));
|
|
|
r->mask = n_bits - 1;
|