rippled
Loading...
Searching...
No Matches
libxrpl/basics/mulDiv.cpp
1#include <xrpl/basics/mulDiv.h>
2
3#include <boost/multiprecision/cpp_int.hpp>
4#include <boost/multiprecision/detail/default_ops.hpp>
5#include <boost/multiprecision/fwd.hpp>
6
7#include <cstdint>
8#include <optional>
9
10namespace ripple {
11
14{
15 boost::multiprecision::uint128_t result;
16 result = multiply(result, value, mul);
17
18 result /= div;
19
20 if (result > ripple::muldiv_max)
21 return std::nullopt;
22
23 return static_cast<std::uint64_t>(result);
24}
25
26} // namespace ripple
T is_same_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
auto constexpr muldiv_max
Definition mulDiv.h:9
STAmount multiply(STAmount const &amount, Rate const &rate)
Definition Rate2.cpp:34
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.