Обнаружение недостатка во время выполнения - PullRequest
5 голосов
/ 22 апреля 2011

Есть ли какой-нибудь способ автоматически обнаружить недостаточное значение во время выполнения?

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

Я говорю о компиляторе G ++.

1 Ответ

2 голосов
/ 22 апреля 2011

C99 / C ++ 11 имеет функции управления с плавающей запятой (например, fetestexcept) и определенные флаги (включая FE_UNDERFLOW), которые должны позволять вам обнаруживать недостаточное вычисление с плавающей запятой разумно переносимым образом (т. Е. С любым компилятором / библиотекой, поддерживающей эти).

Хотя они не такие переносимые, у gcc есть feenableexcept, который позволит вам устанавливать исключения с плавающей запятой, которые перехватываются.Когда срабатывает одно из исключений, которые вы включили, ваша программа получит сигнал SIGFPE.

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

...