В стандартной библиотеке есть стандартные математические функции (cos, sin, log и т.д.). Их объявления можно найти в заголовке .
Стандартные математические функции могут иметь аргументы типов float, double, long double и complex. Эти функции очень полезны при вычислениях с плавающей точкой. Более подробная информация содержится в широко доступной документации, а для начала можно обратиться к документации, размещенной в веб.
\-7[ Если стандартная математическая функция не может дать корректного резуль-
* тата, она устанавливает флажок errno. Рассмотрим пример.
errno = 0;
double s2 = sqrt(-1);
if (errno) cerr << "что-то где-то пошло не так, как надо";
24.9. КОМПЛЕКСНЫЕ ЧИСЛА
917
if (errno == EDOM) // ошибка из-за выхода аргумента // за пределы области определения cerr << "фунция sqrt() для отрицательных аргументов \\ не определена"; pow(very_large,2); // плохая идея
if (errno==ERANGE) // ошибка из-за выхода за пределы допустимого // диапазона cerr << "pow(" << very_large
<< ",2) слишком большое число для double";
Если вы выполняете серьезные математические вычисления, то всегда должны проверять значение errno, чтобы убедиться, что после возвращения результата оно по-прежнему равно 0. Если нет, то что-то пошло не так, как надо. Для того чтобы узнать, какие математические функции могут устанавливать флажок errno и чему он может быть равен, обратитесь к документации.
Как показано в примере, ненулевое значение флажка errno просто означает, что что-то пошло не так. Функции, не входящие в стандартную библиотеку, довольно часто также устанавливают флажок errno при выявлении ошибок, поэтому следует точнее анализировать разные значения переменной errno, чтобы понять, что именно случилось. В данном примере до вызова стандартной библиотечной функции переменная errno была равна нулю, а проверка значения errno сразу после выполнения функции может обнаружить, например, константы EDOM и ERANGE.
Константа EDOM означает ошибку, возникшую из-за выхода аргумента за пределы области определения функции (domain error). Константа ERANGE означает выход за пределы допустимого диапазона значений (range error).
Обработка ошибок с помощью переменной errno носит довольно примитивный характер. Она уходит корнями в первую версию (выпуска 1975 года) математических функций языка C.
Опубликовал katy
April 23 2015 12:20:48 ·
0 Комментариев ·
3398 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.