HIBF 1.0.0-rc.1
Loading...
Searching...
No Matches
bin_size_in_bits.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2024, Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024, Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
12#include <cassert>
13#include <cmath> // for log, ceil, exp
14#include <cstddef> // for size_t
15
16#include <hibf/platform.hpp>
17
18namespace seqan::hibf::build
19{
20
26{
27 double fpr{};
28 size_t hash_count{};
29 size_t elements{};
30};
31
35inline constexpr size_t bin_size_in_bits(bin_size_parameters const & params)
36{
37 assert(params.hash_count > 0);
38 assert(params.fpr > 0.0);
39 assert(params.fpr < 1.0);
40
41 double const numerator{-static_cast<double>(params.elements * params.hash_count)};
42 double const denominator{std::log(1 - std::exp(std::log(params.fpr) / params.hash_count))};
43 double const result{std::ceil(numerator / denominator)};
44 return result;
45}
46
47} // namespace seqan::hibf::build
T ceil(T... args)
T exp(T... args)
constexpr size_t bin_size_in_bits(bin_size_parameters const &params)
Computes the bin size.
Definition bin_size_in_bits.hpp:35
T log(T... args)
Provides platform and dependency checks.
Contains parameters for bin_size_in_bits.
Definition bin_size_in_bits.hpp:26