Что означает код errno 33 (EDOM)?

 
Также может означать:
КонстантаТипОС
ERROR_LOCK_VIOLATIONОшибка WindowsWindows
KERN_INVALID_LEDGERКод возврата ядра macOSmacOS
ippStsDstSizeLessExpectedСтатус Intel IPPЛюбая
QUOTA_UNDERFLOWКод BSODWindows
Предыдущий Следующий
EPIPE ERANGE

EDOM

Недопустимый аргумент, а не только слишком большой результат

EDOM обозначает ошибку области определения: переданное значение находится вне множества аргументов, для которых функция определена в соответствующем вещественном интерфейсе. Например, в Linux функции семейства log() считают отрицательный аргумент ошибкой области определения и возвращают NaN; для pow() такая ошибка возникает при отрицательном основании и конечном нецелом показателе.

Важно не смешивать это состояние с ERANGE. Для log() ноль не является ошибкой области определения в том же смысле: это полюс, математический результат которого равен минус бесконечности, поэтому интерфейс сообщает ERANGE. Различие показывает, нужно ли исправлять сам аргумент либо обрабатывать допустимую операцию с результатом, который нельзя нормально представить.

Как надёжно проверять ошибки математических функций

  • Записывайте имя функции, все входные значения и наличие NaN или бесконечности: у разных функций один код связан с разными предусловиями.
  • Если приложение знает способ восстановления, проверяйте ограничения области определения до вызова.
  • Перед проверяемым вызовом обнуляйте errno и флаги исключений с плавающей точкой; после вызова анализируйте и результат, и состояние FPU.
  • Учитывайте параметры компилятора и оптимизированные математические реализации. Гарантированное сигнализирование определяется фактически использованной функцией и конфигурацией среды выполнения.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.