mirror of
https://github.com/XRPLF/rippled.git
synced 2026-07-24 15:40:26 +00:00
24 lines
566 B
C++
24 lines
566 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <limits>
|
|
#include <optional>
|
|
|
|
namespace xrpl {
|
|
constexpr auto kMuldivMax = std::numeric_limits<std::uint64_t>::max();
|
|
|
|
/**
|
|
* Return value*mul/div accurately.
|
|
*
|
|
* Computes the result of the multiplication and division in
|
|
* a single step, avoiding overflow and retaining precision.
|
|
*
|
|
* @throws None
|
|
* @return `std::nullopt` if the calculation overflows. Otherwise,
|
|
* `value * mul / div`.
|
|
*/
|
|
std::optional<std::uint64_t>
|
|
mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div);
|
|
|
|
} // namespace xrpl
|