Re: детектировать переполнения при целочисленных операциях
От: Lonely Dog Россия  
Дата: 25.08.22 09:27
Оценка: -1
Здравствуйте, 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);
        }
    }


Может и вам подойдет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.