Безопасно проверить, будет ли подписанное умножение переполнено в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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