Как заранее определить, возможно ли переполнение беззнакового вычисления?

В качестве личного проекта я работаю над реализацией числового типа с произвольной точностью для моего любимого проекта.

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

Я исследую область и пытаюсь выяснить, есть ли способ приблизительно предсказать, вызовет ли операция переполнение, до того, как я фактически выполню вычисления. Меня тоже не особо беспокоят ложные срабатывания.

Я хочу иметь возможность использовать наименьшее пространство, подходящее для вычислений. Если расчет останется в пределах его родных границ, я оставлю его там.

Например: Умножение двух 64-битных целых чисел, если каждое из них достаточно велико, вызовет переполнение. Я хочу обнаружить это и преобразовать числа в мой числовой тип с повышением частоты, только если результат может превышать разрешение 64 бита. В этом эксперименте я буду работать с подписанными числами.

Каков наиболее разумный и эффективный способ обнаружения переполнения / потери значимости?

6
задан 9 November 2011 в 00:27
поделиться