| Предыдущий | Следующий |
| EDOM | EDEADLK |
ERANGE
Допустимый аргумент, непредставимый результат
ERANGE обычно означает, что операция математически осмысленна, но её результат невозможно представить целевым типом или интерфейсом. Математические функции используют этот код при переполнении и потере порядка. Полюс, например log(0), также приводит к ERANGE, поскольку точный результат равен бесконечности.
Ошибка не ограничивается вычислениями с плавающей точкой. strtol() возвращает LONG_MAX или LONG_MIN и устанавливает errno в ERANGE, когда разобранное целое выходит за диапазон long. По одному граничному возвращённому значению нельзя отличить корректное число на границе от неудачного преобразования.
Отличие от EDOM
| Состояние | Смысл | Типичный пример |
|---|---|---|
EDOM | Аргумент находится вне области определения функции. | log(-1) либо отрицательное основание pow() с нецелым показателем. |
ERANGE | Операция определена, но результат не помещается в целевое представление. | Переполнение pow() либо целое вне диапазона при разборе strtol(). |
Проверка и обработка
- Для преобразования целых перед
strtol()установитеerrnoв ноль, сохраните end pointer, затем проверьтеERANGE. - Для математических функций предварительно очистите исключения FPU и после вызова анализируйте
FE_OVERFLOW,FE_UNDERFLOWиFE_DIVBYZEROвместе с результатом иerrno. - Осознанно выберите отказ, более широкий тип, масштабирование или документированное насыщение. Молчаливое ограничение значения может скрыть более раннюю ошибку данных или единиц измерения.
Ссылки
- Руководство Linux: math_error(7)
- Руководство Linux: strtol(3)
- Руководство Linux: log(3)
- Руководство Linux: pow(3)
Нужно найти другой код? Найти другой код состояния или ошибки.