rippled
Loading...
Searching...
No Matches
MathUtilities.h
1#ifndef XRPL_BASICS_MATHUTILITIES_H_INCLUDED
2#define XRPL_BASICS_MATHUTILITIES_H_INCLUDED
3
4#include <algorithm>
5#include <cassert>
6#include <cstddef>
7
8namespace ripple {
9
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 ripple
48
49#endif
T min(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
constexpr std::size_t calculatePercent(std::size_t count, std::size_t total)
Calculate one number divided by another number in percentage.