Можно ли предсказать, приведет ли математическая операция к переполнению? - PullRequest
3 голосов
/ 20 августа 2010

Допустим, у вас есть 2 числа, для каждой типичной математической операции можно предсказать (без значительных накладных расходов), приведет ли эта операция к переполнению типа, который эти числа в настоящее время представлены как?

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

Да.

Предположим, что переполнение происходит при 100, для простоты.

a * b >= 100, переполнение

Следовательно, для a = n, если b >= 100 / n, у нас переполнение. Если a или b равно 0, переполнения нет.

Это не будет работать для любой математической установки, которая должна увеличить правую константу, поскольку ваше обнаружение переполнения будет переполнено. Однако любой шаг операции может быть переполнен, поэтому вам действительно нужно проверять каждое сложение и умножение, прежде чем оно произойдет на уровне машины, а не на уровне алгоритма. Поэтому вам нужно разделить вашу проблему на наименьшее из известных количеств, чтобы эффективно использовать это обнаружение переполнения.

Я бы лучше позволил языку выбросить исключение, но это только я.

0 голосов
/ 20 августа 2010

На сумму:

MAX_NUMBER - A < B

произойдет переполнение

0 голосов
/ 20 августа 2010

Включите защиту от переполнения, а затем примените операцию. Если возникает исключение переполнения или регистр ошибок получает бит переполнения, или если ваша среда сообщает вам о проблеме, вы знаете, что если вы сделаете это снова, вы получите переполнение.

...