Я хотел бы реализовать численный алгоритм на C, и у меня возникли некоторые проблемы, связанные с обработкой ошибок. Я использую функцию ldexp
из cmath.h
аналогичным образом, как описано здесь . Обратите внимание, что это (и следующий пример взяты с сайта C ++. Это связано с тем, что я не смог найти ни одного современного сайта, специфичного для C).
Однако функция ldexp
может переполниться для большого показателя степени (в примере значение n
), в этом случае возвращается inf
.
Я хотел бы убедиться (по крайней мере, в режиме отладки), что эта ошибка обнаружена.
Я нашел этот пример, связанный с обработкой ошибок в Си, что вызывает еще больше вопросов.
Во-первых, существуют два разных подхода к обработке ошибок: MATH_ERREXCEPT
и MATH_ERRNO
. В моей системе оба поддерживаются (согласно битовому флагу).
Почему существуют два разных подхода? Является ли один из них (или оба) стандартизирован (в C11)? Могу ли я сделать предположения относительно того, какой подход используется, или мне всегда нужно писать код для обоих?
Для каждого из подходов: нужно ли очищать состояние ошибки перед выполнением операции? Что делать, если я выполняю серию операций ldexp
и меня интересует только то, произошла ли ошибка в какой-либо операции (достаточно ли один раз проверить ее на наличие ошибки)?