C99 / C ++ 11 имеет функции управления с плавающей запятой (например, fetestexcept
) и определенные флаги (включая FE_UNDERFLOW
), которые должны позволять вам обнаруживать недостаточное вычисление с плавающей запятой разумно переносимым образом (т. Е. С любым компилятором / библиотекой, поддерживающей эти).
Хотя они не такие переносимые, у gcc есть feenableexcept
, который позволит вам устанавливать исключения с плавающей запятой, которые перехватываются.Когда срабатывает одно из исключений, которые вы включили, ваша программа получит сигнал SIGFPE
.
По крайней мере на большинстве аппаратных средств, нет эквивалента для целочисленных операций - нижний поток просто производит дополнение 2 (илив любом случае) и (например) устанавливает флаги (например, переносить и подписывать биты), чтобы сигнализировать о том, что произошло.В C99 / C ++ 11 есть некоторые флаги для таких вещей, как целочисленное переполнение, но я не думаю, что они так широко поддерживаются.