xrpld
Loading...
Searching...
No Matches
MathUtilities.h
1#pragma once
2
3#include <algorithm>
4#include <cassert>
5#include <cstddef>
6
7namespace xrpl {
8
24constexpr std::size_t
26{
27 assert(total != 0); // NOTE No XRPL_ASSERT here, because constexpr
28 return ((std::min(count, total) * 100) + total - 1) / total;
29}
30
31// unit tests
32static_assert(calculatePercent(1, 2) == 50);
33static_assert(calculatePercent(0, 100) == 0);
34static_assert(calculatePercent(100, 100) == 100);
35static_assert(calculatePercent(200, 100) == 100);
36static_assert(calculatePercent(1, 100) == 1);
37static_assert(calculatePercent(1, 99) == 2);
38static_assert(calculatePercent(6, 14) == 43);
39static_assert(calculatePercent(29, 33) == 88);
40static_assert(calculatePercent(1, 64) == 2);
41static_assert(calculatePercent(0, 100'000'000) == 0);
42static_assert(calculatePercent(1, 100'000'000) == 1);
43static_assert(calculatePercent(50'000'000, 100'000'000) == 50);
44static_assert(calculatePercent(50'000'001, 100'000'000) == 51);
45static_assert(calculatePercent(99'999'999, 100'000'000) == 100);
46
47} // namespace xrpl
T min(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
constexpr std::size_t calculatePercent(std::size_t count, std::size_t total)
Calculate one number divided by another number in percentage.