| Предыдущий | Следующий |
| EPIPE | ERANGE |
EDOM
Недопустимый аргумент, а не только слишком большой результат
EDOM обозначает ошибку области определения: переданное значение находится вне множества аргументов, для которых функция определена в соответствующем вещественном интерфейсе. Например, в Linux функции семейства log() считают отрицательный аргумент ошибкой области определения и возвращают NaN; для pow() такая ошибка возникает при отрицательном основании и конечном нецелом показателе.
Важно не смешивать это состояние с ERANGE. Для log() ноль не является ошибкой области определения в том же смысле: это полюс, математический результат которого равен минус бесконечности, поэтому интерфейс сообщает ERANGE. Различие показывает, нужно ли исправлять сам аргумент либо обрабатывать допустимую операцию с результатом, который нельзя нормально представить.
Как надёжно проверять ошибки математических функций
- Записывайте имя функции, все входные значения и наличие NaN или бесконечности: у разных функций один код связан с разными предусловиями.
- Если приложение знает способ восстановления, проверяйте ограничения области определения до вызова.
- Перед проверяемым вызовом обнуляйте
errnoи флаги исключений с плавающей точкой; после вызова анализируйте и результат, и состояние FPU. - Учитывайте параметры компилятора и оптимизированные математические реализации. Гарантированное сигнализирование определяется фактически использованной функцией и конфигурацией среды выполнения.
Ссылки
- Руководство Linux: math_error(7)
- Руководство Linux: log(3)
- Руководство Linux: pow(3)
- Руководство Linux: errno(3)
Нужно найти другой код? Найти другой код состояния или ошибки.