Является ли 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
Ответить

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

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

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

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

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