Какая польза от feholdexcept и т.д.?

Документация (в стандартах) для всех fenv.h довольно запутанна, но меня особенно путают в отношении feholdexcept и концепции "безостановочного режима" для исключения с плавающей запятой. Насколько я могу судить, в любой реализации IEEE с плавающей запятой исключения по умолчанию не передаются по сигналу/ "без остановок", а интерфейсы fenv.h, по-видимому, не дают возможности включить режим сигнализации, если это не было по умолчанию. Является ли вся концепция feholdexcept бесполезной, за исключением систем или систем не-IEEE с нестандартными расширениями для установки маски сигнализации сигнализации?

Ответы

Ответ 1

Предположим, что вы реализуете библиотеку, и вы ничего не знаете о том, что ваши вызывающие лица могут выполнять среду с плавающей запятой, прежде чем вызывать код. Они могут разоблачить исключение и установить собственный обработчик ловушки, который вызывает деление на ноль для получения значения 42. Предположим, что ваша библиотека зависит от поведения по умолчанию IEEE-754 для деления на ноль. Функция feholdexcept предоставляет вам средства для обеспечения соблюдения этого поведения. Окружение вызывающего абонента, в комплекте со своим незамасленным исключением, может быть восстановлено с помощью функции fesetenv.

Это, по общему признанию, довольно неясный краеугольный случай использования, но, откровенно говоря, все в fenv.h довольно неясно большинству программистов.