Я подозреваю, что вы ссылаетесь на math_errhandling
из C ++. Это не библиотека, это константа, определяемая реализацией, которая сообщает вам , как реализация обрабатывает ошибки. Вы не можете изменить значение этой константы через C ++, хотя вы можете изменить ее значение с помощью определенных параметров компилятора (см. Документацию).
Несмотря на это, стандарт определяет только возможные значения MATH_ERRNO==1
, MATH_ERREXCEPT==2
и (неявно) MATH_ERRNO | MATH_ERREXCEPT==3
. Вы задаетесь вопросом о MATH_ERREXCEPT
. Это просто означает, что вы можете звонить std::fetestexcept(FE_INVALID)
после каждого звонка. Это не автоматическое throw
реального исключения C ++, которое вы можете catch
.
Основная проблема заключается в том, что C ++ на самом деле не соответствует современному оборудованию FP, которое ориентировано на вектор. Для высокопроизводительного кода компилятор объединит много операций, но модель исключений C ++ предполагает, что вы можете точно определить, какая операция завершилась неудачно. IEEE754 меньше страдает от этого, потому что имеет менее точную обработку ошибок. Использование NaN
допускает больше параллелизма.