3 namespace cachemere::policy::detail {
5 inline size_t optimal_filter_size(uint32_t cardinality) noexcept
7 const static double multiplier = log(0.01) / pow(log(2), 2);
8 const double ideal_set_size = -
static_cast<double>(cardinality) * multiplier;
10 assert(ideal_set_size > 1);
11 return static_cast<size_t>(ideal_set_size);
14 inline uint32_t optimal_nb_of_hash_functions(uint32_t cardinality,
size_t filter_size) noexcept
16 const static double log_2 = log(2);
17 const double nb_hashes = (
static_cast<double>(filter_size) /
static_cast<double>(cardinality)) * log_2;
19 assert(nb_hashes >= 1);
20 return static_cast<uint32_t
>(nb_hashes);