xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
libxrpl
basics
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
8
namespace
xrpl
{
9
10
std::optional<std::uint64_t>
11
mulDiv
(
std::uint64_t
value,
std::uint64_t
mul,
std::uint64_t
div)
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
cstdint
std::uint64_t
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::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:11
xrpl::kMuldivMax
constexpr auto kMuldivMax
Definition
mulDiv.h:8
xrpl::multiply
STAmount multiply(STAmount const &amount, Number const &frac, Number::RoundingMode rm)
Definition
AMMHelpers.cpp:293
optional
Generated by
1.17.0