xrpld
Loading...
Searching...
No Matches
libxrpl/basics/mulDiv.cpp
1#include <xrpl/basics/mulDiv.h>
2
3#include <boost/multiprecision/cpp_int.hpp> // IWYU pragma: keep
4
5#include <cstdint>
6#include <optional>
7
8namespace xrpl {
9
10std::optional<std::uint64_t>
12{
13 boost::multiprecision::uint128_t result;
14 result = multiply(result, value, mul);
15
16 result /= div;
17
18 if (result > xrpl::kMuldivMax)
19 return std::nullopt;
20
21 return static_cast<std::uint64_t>(result);
22}
23
24} // namespace xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.
constexpr auto kMuldivMax
Definition mulDiv.h:8
STAmount multiply(STAmount const &amount, Number const &frac, Number::RoundingMode rm)