что такое ошибка домена - PullRequest
       9

что такое ошибка домена

11 голосов
/ 13 марта 2009

в c ++, имеет базовый класс для «ошибок домена», std :: domain_error. я не понимаю, при каких обстоятельствах я должен выдать ошибку домена в моем коде. все остальные базовые классы исключений говорят сами за себя. Я уверен, что std :: domain_error не имеет ничего общего с именами доменов в Интернете, так что, пожалуйста, объясните, к какому классу относится ошибка домена, и приведите несколько примеров.

Ответы [ 7 ]

12 голосов
/ 13 марта 2009

Ошибки домена и диапазона используются при работе с математическими функциями.

С одной стороны, домен функции - это набор значений, которые могут быть приняты функцией. Например, домен функции квадратного квадрата представляет собой набор положительных действительных чисел. Следовательно, исключение domain_error должно создаваться, если аргументы функции не содержатся в ее домене

С другой стороны, диапазон функции - это набор значений, которые функция может вернуть. Например, диапазон функции, подобной этой:

f(x) = -x²

- множество отрицательных действительных чисел. Так в чем же смысл range_error? Если аргументы функции находятся в ее домене, то результат должен быть в его диапазоне, поэтому у нас не должно быть никаких ошибок в пределах диапазона ... Однако иногда значение может быть определено , но не будучи представимым . Например, в C функции в <math.h> генерируют ошибки, если возвращаемое значение слишком велико (или слишком мало) по величине, чтобы представлять

6 голосов
/ 13 марта 2009

A ошибка домена относится к проблемам с математическими доменами функций. Функции иногда определяются только для определенных значений. Если вы попытаетесь вызвать такую ​​функцию с аргументом, который не является частью ее домена, это будет ошибкой домена.

Например, попытка вызвать sqrt() с отрицательным аргументом является ошибкой домена, поскольку отрицательные числа не являются частью домена sqrt().

2 голосов
/ 13 марта 2009

Ну, это все руководство, которое вы получаете из стандарта C ++:

Класс domain_error определяет тип объектов, выданных как исключения путем реализации, чтобы сообщить домен ошибки.

Домен здесь означает «проблемный домен», ничего общего с Интернетом. Например, функция квадратного корня может выдать ошибку домена, если передано отрицательное число.

2 голосов
/ 13 марта 2009

Довольно хорошая форма объяснения cplusplus.com :

Обычно область математической функции - это подмножество значений, для которых она определена. Например, функция квадратного корня определяется только для неотрицательных чисел. Таким образом, отрицательное число для такой функции будет ошибкой домена.

2 голосов
/ 13 марта 2009

Это для логических ошибок класса «доменных» ошибок. Это может относиться к любой ситуации, когда входные данные для функции превышают допустимый домен для ее работы. Это его заявленная цель в стандарте.

Например, у вас есть функция, которая принимает только положительные числа с плавающей точкой, поэтому она выдает domain_error для отрицательных чисел.

1 голос
/ 13 марта 2009

"Подробное описание Брошенный библиотекой или вами, чтобы сообщить об ошибках домена (домен в математическом смысле). «

От: http://www.aoc.nrao.edu/~tjuerges/ALMA/STL/html/classstd_1_1domain__error.html

в соответствии с этим, его следует использовать, если вам дают ввод, который не соответствует ограничениям, которые вы накладываете на свой интерфейс. Например, функция, которая должна получить положительное значение и получить отрицательное значение.

1 голос
/ 13 марта 2009

Это относится к математическим областям.

float MySqrRoot(float x)
{
    // sqrt is not valid for negative numbers.
    if (x < 0) throw new domain_error;

    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...