mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-18 18:15:50 +00:00
Per XLS-0095, we are taking steps to rename ripple(d) to xrpl(d). This change specifically removes all copyright notices referencing Ripple, XRPLF, and certain affiliated contributors upon mutual agreement, so the notice in the LICENSE.md file applies throughout. Copyright notices referencing external contributions remain as-is. Duplicate verbiage is also removed.
27 lines
673 B
C++
27 lines
673 B
C++
#ifndef XRPL_BASICS_MULDIV_H_INCLUDED
|
|
#define XRPL_BASICS_MULDIV_H_INCLUDED
|
|
|
|
#include <cstdint>
|
|
#include <limits>
|
|
#include <optional>
|
|
|
|
namespace ripple {
|
|
auto constexpr muldiv_max = 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
|
|
Returns:
|
|
`std::optional`:
|
|
`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 ripple
|
|
|
|
#endif
|