Безопасно проверить, будет ли подписанное умножение переполнено в C ++ 17C++

Программы на C++. Форум разработчиков
Anonymous
Безопасно проверить, будет ли подписанное умножение переполнено в C ++ 17

Сообщение Anonymous »

Я ищу удобную идиому, чтобы проверить, умножение двух подписанных целых чисел ( s или long long s) переполнены, поскольку подписанный арифметический переполнение является неопределенным поведением в C и C ++. Я в порядке, используя любые библиотечные функции, доступные в C ++ 17, но в идеальном мире хотелось бы что -то более дешевое, чем Integer Division (например, проверка b = std :: numeric_limits :: mond ()/а или код в код> или код, с кодовой, с кодом> или кодовой. аргументы). В идеальном мире решение было бы чем-то, что компилятор мог бы оптимизировать (так же, как и вручную не выполнять размножение по одному слову за раз). < /P>
Я хотел бы избежать любых идиом, которые сначала выполняют умение, а затем проверка в здравомыслие, потому что компилятор может удалить проверку в области здравоохранения на основе предположения о том, что подписанная аритметика не может переполняться. (В конце концов, переполнение было бы неопределенным поведением, поэтому компилятор может предположить, что программист никогда не позволит этому случиться.) К сожалению, большинство алгоритмов, которые я видел, предложены в этой форме, поэтому кажутся небезопасными.

Подробнее здесь: https://stackoverflow.com/questions/775 ... low-in-c17

Вернуться в «C++»