rippled
Loading...
Searching...
No Matches
MathUtilities.h
1#pragma once
2
3#include <algorithm>
4#include <cassert>
5#include <cstddef>
6
7namespace xrpl {
8
23constexpr std::size_t
25{
26 assert(total != 0); // NOTE No XRPL_ASSERT here, because constexpr
27 return ((std::min(count, total) * 100) + total - 1) / total;
28}
29
30// unit tests
31static_assert(calculatePercent(1, 2) == 50);
32static_assert(calculatePercent(0, 100) == 0);
33static_assert(calculatePercent(100, 100) == 100);
34static_assert(calculatePercent(200, 100) == 100);
35static_assert(calculatePercent(1, 100) == 1);
36static_assert(calculatePercent(1, 99) == 2);
37static_assert(calculatePercent(6, 14) == 43);
38static_assert(calculatePercent(29, 33) == 88);
39static_assert(calculatePercent(1, 64) == 2);
40static_assert(calculatePercent(0, 100'000'000) == 0);
41static_assert(calculatePercent(1, 100'000'000) == 1);
42static_assert(calculatePercent(50'000'000, 100'000'000) == 50);
43static_assert(calculatePercent(50'000'001, 100'000'000) == 51);
44static_assert(calculatePercent(99'999'999, 100'000'000) == 100);
45
46} // 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.