Макрос библиотеки C -EDOM

Стандартная библиотека C - <errno.h>

Описание

Макрос библиотеки CEDOMУказывает на ошибку области определения, которая возникает, когда входной аргумент выходит за пределы области определения, заданной математической функцией, и errno устанавливается в EDOM.

EDOMЭто макрос в стандартной библиотеке C, определённый в<errno.h>заголовочный файл. Он используется для представления ошибки области определения аргумента математической функции, то есть аргумент функции выходит за пределы математической области определения. Обычно это происходит в функциях математической библиотеки (таких какsqrt、log、asinКогда (и т. д.) получает недопустимые входные параметры.

Объявление

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

#define EDOM some_value

Параметр

  • Н/Д

Возвращаемое значение

  • Н/Д

Пример

В следующем примере демонстрируется использование макроса EDOM.

Пример

#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    double x = -1.0;
    double result;

    // Очистить предыдущую ошибку
    errno = 0;

    // Вызов функции sqrt, передача отрицательного значения вызовет ошибку области определения
    result = sqrt(x);

    if (errno == EDOM) {
        printf("Ошибка: ошибка области определения sqrt(), входное значение %f\n", x);
    } else {
        printf("Квадратный корень из %f равен %f\n", x, result);
    }

    return 0;
}

Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:

The square root of -1.000000 is nan

В этом примере:

  1. Мы пытаемся вычислить квадратный корень из -1, что является операцией вне области определения, потому что отрицательные числа не имеют действительного квадратного корня.
  2. sqrtФункция обнаружит эту ошибку области определения иerrnoУстановить вEDOM。
  3. Мы проверяемerrnoзначение, если оноEDOM, затем выведите соответствующее сообщение об ошибке.

связанные математические функции

Ниже приведены некоторые, которые могут устанавливатьerrnoявляетсяEDOMматематические функции:

  • sqrt(x): когдаx < 0Когда ..., оно установитerrnoявляетсяEDOM。
  • log(x): когдаx <= 0Когда ..., оно установитerrnoявляетсяEDOM。
  • asin(x)иacos(x): когдаxКогда оно не находится в диапазоне [-1, 1], оно установитerrnoявляетсяEDOM。
  • pow(x, y): когдаx < 0иyКогда оно не является целым числом, оно установитerrnoявляетсяEDOM。

Примечания по использованию

  1. Проверьте возвращаемое значение: После вызова математической функции, которая может вызвать ошибку области определения, следует проверить возвращаемое значение, и когда функция возвращает специальное значение (например,NaN) при проверкеerrno。
  2. Инициализацияerrno: перед вызовом функции следуетerrnoустановите в 0, чтобы гарантировать, что код ошибки создан этим вызовом, а не остался от предыдущего вызова.
  3. Потокобезопасность: в многопоточных программах,errnoобычно реализуется как локальное хранилище потока (TLS), гарантируя, что каждый поток имеет своё собственноеerrnoзначение.

Другие связанные коды ошибок

exceptEDOM,<errno.h>Существуют другие коды ошибок, связанные с математическими функциями, в:

  • ERANGE: Результат выходит за пределы диапазона. Например, вычислениеexp(1000)может вызвать переполнение, и приведётerrnoУстановить вERANGE。
  • EILSEQ: недопустимая байтовая последовательность. При обработке функций для широких символов или многобайтовых символов входные данные содержат недопустимую последовательность символов.

Короче говоря,EDOMявляется важным макросом для обработки ошибок области определения математических функций, помогая программистам обнаруживать и обрабатывать недопустимые входные параметры. Разумно используяerrnoи связанные с ним макросы, можно писать более надёжный и стабильный код.

Стандартная библиотека C - <errno.h>

Другие расширения