Обработка математических ошибок в C - PullRequest
0 голосов
/ 27 мая 2019

Я хотел бы реализовать численный алгоритм на C, и у меня возникли некоторые проблемы, связанные с обработкой ошибок. Я использую функцию ldexp из cmath.h аналогичным образом, как описано здесь . Обратите внимание, что это (и следующий пример взяты с сайта C ++. Это связано с тем, что я не смог найти ни одного современного сайта, специфичного для C).

Однако функция ldexp может переполниться для большого показателя степени (в примере значение n), в этом случае возвращается inf.

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

Во-первых, существуют два разных подхода к обработке ошибок: MATH_ERREXCEPT и MATH_ERRNO. В моей системе оба поддерживаются (согласно битовому флагу).

Почему существуют два разных подхода? Является ли один из них (или оба) стандартизирован (в C11)? Могу ли я сделать предположения относительно того, какой подход используется, или мне всегда нужно писать код для обоих?

Для каждого из подходов: нужно ли очищать состояние ошибки перед выполнением операции? Что делать, если я выполняю серию операций ldexp и меня интересует только то, произошла ли ошибка в какой-либо операции (достаточно ли один раз проверить ее на наличие ошибки)?

...