rippled
Loading...
Searching...
No Matches
libxrpl
basics
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
10
namespace
ripple
{
11
12
std::optional<std::uint64_t>
13
mulDiv
(
std::uint64_t
value,
std::uint64_t
mul,
std::uint64_t
div)
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
cstdint
std::uint64_t
std::is_same_v
T is_same_v
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:6
ripple::muldiv_max
auto constexpr muldiv_max
Definition
mulDiv.h:9
ripple::multiply
STAmount multiply(STAmount const &amount, Rate const &rate)
Definition
Rate2.cpp:34
ripple::mulDiv
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.
Definition
libxrpl/basics/mulDiv.cpp:13
optional
Generated by
1.9.8