Ваше состояние, что вам нужны "большие числа", но это не обязательно означает, что указывается использование long double.В большинстве встраиваемых приложений, о которых я знаю, long double выбирается из-за его повышенной точности, то есть большего числа битов разрешения для дробных чисел, чем для его увеличенного диапазона.
Вы также утверждаете, что ваша реализация предлагает мало обычного плавающеготочечные библиотеки и / или функциональность.Основываясь на этих утверждениях, я бы усомнился, нужны ли вам полностью функциональные возможности с плавающей запятой.Если ваши проблемы ограничены «большими числами», проверьте, не предлагает ли ваш компилятор тип данных long long , который представляет собой 64-разрядное целое число.
Если вам нужно некоторое число с плавающей запятойвозможность точки, вы могли бы рассмотреть реализацию с фиксированной точкой.Предполагая длинную длинную, вы можете выбрать представление чисел в формате 48.16, что позволит использовать числа ~ 2,8x10 ^ 14 с 16 битами справа от десятичной дроби.(Если вам нужно введение в вычисления с фиксированной запятой, начните здесь .)
Рассмотрев некоторые фоновые проблемы, давайте рассмотрим исходный вопрос.Если вы хотите обнаружить переполнение в unsigned int (что я обычно делаю во встроенной работе), достаточно сравнить ваш последний результат с предыдущим.Например, мое приложение требует от меня периодически проверять 16-битный счетчик, который управляется внешними часами.Если мое текущее наблюдение меньше, чем последнее наблюдение, то я могу предположить, что 16-битный счетчик переполнен, и я могу принять соответствующие меры.Если вы реализуете свои большие числа, используя тип данных long long integer, вы можете применить аналогичную стратегию для обнаружения переполнения.