Да.
Предположим, что переполнение происходит при 100, для простоты.
a * b >= 100
, переполнение
Следовательно, для a = n
, если b >= 100 / n
, у нас переполнение. Если a
или b
равно 0, переполнения нет.
Это не будет работать для любой математической установки, которая должна увеличить правую константу, поскольку ваше обнаружение переполнения будет переполнено. Однако любой шаг операции может быть переполнен, поэтому вам действительно нужно проверять каждое сложение и умножение, прежде чем оно произойдет на уровне машины, а не на уровне алгоритма. Поэтому вам нужно разделить вашу проблему на наименьшее из известных количеств, чтобы эффективно использовать это обнаружение переполнения.
Я бы лучше позволил языку выбросить исключение, но это только я.