Какая польза от feholdexcept и т. Д.? - PullRequest
14 голосов
/ 12 июня 2011

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

1 Ответ

6 голосов
/ 14 июня 2011

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

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

...