Cachemere
Modular Caching Library for C++
bloom_filter_math.hpp
1 #include <cassert>
2 
3 namespace cachemere::policy::detail {
4 
5 inline size_t optimal_filter_size(uint32_t cardinality) noexcept
6 {
7  const static double multiplier = log(0.01) / pow(log(2), 2);
8  const double ideal_set_size = -static_cast<double>(cardinality) * multiplier;
9 
10  assert(ideal_set_size > 1);
11  return static_cast<size_t>(ideal_set_size);
12 }
13 
14 inline uint32_t optimal_nb_of_hash_functions(uint32_t cardinality, size_t filter_size) noexcept
15 {
16  const static double log_2 = log(2);
17  const double nb_hashes = (static_cast<double>(filter_size) / static_cast<double>(cardinality)) * log_2;
18 
19  assert(nb_hashes >= 1);
20  return static_cast<uint32_t>(nb_hashes);
21 }
22 
23 } // namespace cachemere::policy::detail