Здравствуйте, Sm0ke, Вы писали:
S>Есть два целых числа типа std::intmax_t
S>Необходимо произвести над ними одну из следующих операций: сложение, вычитание, умножение.
S>Но при переполнении результата преобразовать числа в double перед операцией и вернуть double.
S>А если переполнения нет, то вернуть целый результат.
S>Можно конечно сделать double операцию, и сравнить результат с диапазоном min() max() целого. Если всё ок, то произвести целочисленную операцию.
S>Какие есть ещё варианты?
В solidity вот так делают (см
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol)
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
Может и вам подойдет