Является ли a > c/b более безопасной эквивалентной (но избегающей переполнения) версией a * b > c для деления положительC++

Программы на C++. Форум разработчиков
Anonymous
Является ли a > c/b более безопасной эквивалентной (но избегающей переполнения) версией a * b > c для деления положитель

Сообщение Anonymous »

Это произошло в программе C++, которую я пишу для перебора цикла, где было указано, что условие цикла for a * b > c может переполниться. Я плохо разбираюсь в целочисленной математике, но думаю, математически игнорируя переполнение, a * b > c эквивалентно a > c // b, поэтому вторую форму можно использовать, чтобы избежать переполнения в коде C++. . Для ясности я буду использовать синтаксис Python: / означает рациональное деление, а // означает целочисленное деление:
  • Вперед: a * b > c подразумевает а > с / б >= с // б. (по определению пола. То же самое для a * b >= c)
  • Обратно: a * b = 5 // 2, но НЕ 2 * 2 >= 5, как отмечает Марк Глисс в комментариях. В таком случае, как можно безопасно протестировать a * b >= c без переполнения?

    Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-b-c-for

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