Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Справка функциям С++.doc
Скачиваний:
61
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Matherr

-----------------------------------------------------------------

НазначениеПрограмма обработки математических ошибок,

модифицируемая пользователем.

Синтаксис#include<math.h>

int matherr(struct exeption *e);

Прототип вmath.h

Замечанияmather вызывается функцией _mather для обработ-

ки ошибок функций библиотеки math.h.

По умолчанию в Турбо Си программа matherr прос-

то возвращает 0. Она служит как заготовка, ко-

торую можно заменить, написав свою программу

обработки ошибок (см. приведенный ниже пример

обработки ошибок, определенный пользователем).

Вы можете изменить matherr до сложной программы

обработки ошибок (как, например, распознавание

и исправление некоторых типов ошибок); изменен-

ная matherr должна возвращать 0, если она не

смогла исправить ошибку, и - не ноль, если

ошибка исправлена. Когда matherr возвращает не

ноль, то сообщение об ошибке не печатается и

errno не изменяется.

Структура exeption, определенная в math.h, име-

ет вид:

struct exeption {

+ int type;

char *name;

double arg1,arg2,retval;

};

Эти поля структуры следующие:

-----------------------------------------------------------------

Поле Что оно представляет.

-----------------------------------------------------------------

type тип обнаруженной математической ошибки; описан типом enum

в typedef _mexcep (описание приведено ниже)

name указатель на 0-оканчивающуюся строку, содержащую имя биб-

лиотечной функции, в которой произошла ошибка

arg1, аргументы (переданные функции, указанной в name),

аrg2 которые вызвали ошибку; если функции был передан только

один аргумент - он сохраняется в arg1

retval значение для matherr, возвращаемое по умолчанию; может

быть изменено вами

-----------------------------------------------------------------

typedef _mexcep, описанное в math.h, определяет

следующие символические константы, соответству-

ющие возможным математическим ошибкам:

-----------------------------------------------------------------

Символьная

константа Математическая ошибка

-----------------------------------------------------------------

DOMAIN аргумент не входит в область определения функции,

например: log(-1)

SING аргументы дают бессмысленное значение функции,

например: pow(0,-2)

OVERFLOW аргумент дает результат функции больше, чем

MAXDOUBLE, например: exp(1000)

UNDERFLOW аргумент дает результат функции меньше, чем

MINDOUBLE, например: exp(-1000)

TLOSS аргумент дает результат функции с потерей всех

значащих цифр, например: sin(10e70)

-----------------------------------------------------------------

Символьные константы MAXDOUBLE и MINDOUBLE оп-

ределены в values.h

Отметим, что _matherr не может быть изменена.

Функция matherr очень широко используется в

библиотеках поддержки Си и поэтому рекомендует-

ся ее использование для написания машинно-неза-

висимых программ.

Поведение по умолчанию функции matherr в стиле

ОС UNIX (т.е. печать сообщений и завершение ра-

бот) является несовместимым с ANSI-стандартом.

Eсли вы предпочитаете версию matherr, как в

UNIX, то используйте MATHERR.C, поставляемую на

дистрибутивных дискетах Турбо Си.

ВозвращаемоеПо умолчанию matherr возвращает просто 1,

значениеесли возникла ошибка UNDERFLOW или TLOOS -

функция возвращает 0. matherr может также изме-

нить e->retval, которая вернется в вызвавшую

программу через _matherr.

Когда matherr возвращает 0 (показывая, что нес-

пособна обработать ошибку), _matherr устанавли-

вает errno и печатает сообщение об ошибке (см.

для большей информации _matherr).

Когда matherr возвращает не 0 (что говорит о

возможности исправления ошибки), errno не уста-

навливается и сообщения не печатаются.

Переносимостьmatherr переносима для многих компиляторов язы-

ка Си. Функция matherr в стиле ситемы UNIX на-

ходится в MATHERR.С на дистрибутивных дискетах

Турбо Си.

Смотри также_matherr

Пример

/* Приведена написанная пользователем функция

matherr, обнаруживающая отрицательные аргу-

менты, передаваемые в sgrt, и преобразующая

их в положительные перед запуском sgrt.*/

#include<math.h>

#include<string.h>

int matherr (struct exception *a)

{

if ( a->type == DOMAIN )

{

if (strcmp ( a->name, "sgrt" ) == 0)

{

a->retval = sgrt (- (a->arg1));

return(1);

}

}

return (0);

}

-----------------------------------------------------------------

max

-----------------------------------------------------------------

НазначениеВозвращает большее из двух значений

Синтаксис #include<stdlib.h>

(type)max(a,b);

Прототип вstdlib.h

ЗамечанияЭта функция сравнивает два значения и

возвращает большее из них. Оба аргумента и сама

функция должны быть одного типа.

Возвращаемоеmax возвращает большее из двух значений

значение

Пример #include<stdlib.h>

main()

{

int x = 5;

int y = 6;

int z;

z = (int)max(x,y);

printf("Наибольшее число %d\n",z);

}

Вывод программы:

Наибольшее число 6

-----------------------------------------------------------------