mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

MATHERR(3M)                                         MATHERR(3M)

НАЗВАНИЕ 
        matherr - функция обработки ошибок

СИНТАКСИС 
        #include 
        
        int matherr (x)
        struct exception *x;

ОПИСАНИЕ 
        Функция matherr вызывается функциями из  математической
        библиотеки при обнаружении ошибок.  Пользователи  могут
        определить  собственные  процедуры  обработки   ошибок,
        включая  в  свои  программы  функцию  с именем matherr.
        Функция matherr должна иметь описанный  выше  вид.  При
        возникновении ошибки указатель x на структуру exception
        будет   передан   разработанной  пользователем  функции
        matherr. Эта структура, определенная во включаемом фай-
        ле , имеет следующий вид:

             struct exception {
               int type;
               char *name;
               double arg1, arg2, retval;
             };

        Элемент type представляет собой целое число,  описываю-
        щее тип случившейся ошибки, из следующего списка  конс-
        тант (определенных во включаемом файле):

        DOMAIN      Выход за пределы области определения.

        SING        Попадание аргумента в точку сингулярности.

        OVERFLOW    Переполнение.

        UNDERFLOW   Исчезновение порядка.

        TLOSS       Полная потеря значащих цифр.

        PLOSS       Частичная потеря значащих цифр.

        Элемент  name указывает на цепочку символов, содержащую
        имя функции, при обращении к которой произошла  ошибка.
        Компоненты arg1 и arg2 содержат значения аргументов при
        вызове функции. Полю retval присвоено значение, которое
        будет  возвращено  функцией по умолчанию, то есть в том
        случае, если пользовательская функция matherr не  прис-
        воит ей иного значения.

        Если пользовательская функция matherr возвращает  нену-
        левое значение, то не  будет  выдаваться  сообщение  об
        ошибке и не будет устанавливаться  значение  переменной
        errno.

        Если функция matherr пользователем не предоставлена, то
        при возникновении ошибки по умолчанию будут  вызываться
        процедуры, описанные вместе с соответствующими  матема-
        тическими функциями. Сведения об этих  процедурах  объ-
        единены в таблице, приводимой далее.  В  каждом  случае
        переменной  errno  присваивается  значение  EDOM   либо
        ERANGE и выполнение программы продолжается.

ПРИМЕР 
        #include 
        
        int
        matherr (x)
        register struct exception *x;
        {
          switch (x->type) {
          case DOMAIN:
            /* Возврат значения sqrt(-arg1) вместо 0 */
            if (!strcmp(x->name, "sqrt")) {
              x->retval=sqrt(-x->arg1);
              return(0); /* Выдать сообщ., устан. errno */
            }
          case SING:
            /* Для остальных DOMAIN и SING ошибок:
               выдать сообщение и прекратить выполнение */
            fprintf(stderr,"обл.определения в %s\n",x->name);
            abort();
          case PLOSS:
            /* Выдать подробное сообщение об ошибке */
            fprintf(stderr,"потеря знач.цифр в %s(%g)=%g\n",
                     x->name,x->arg1,x->retval);
            return(1); /* Больше никаких действий */
          }
          return(0); /* Остальные ошибки - по умолчанию */
        }

           ПОДРАЗУМЕВАЕМЫЕ ПРОЦЕДУРЫ ОБРАБОТКИ ОШИБОК
 
                          Типы ошибок
 
    тип     DOMAIN  SING   OVERFLOW  UNDERFLOW  TLOSS   PLOSS
   errno     EDOM   EDOM    ERANGE    ERANGE    ERANGE  ERANGE
 
 BESSEL:                                         M,0      *
 y0,y1,yn   M,-H
  (arg<=0)
 EXP:                         H          0
 LOG,LOG10
  (arg<0)   M,-H
  (arg=0)           M,-H
 POW:                       +/-H         0
 отр^нецел   M,0
 0^неполож   M,0
 SQRT:
  (arg<0)    M,0
 GAMMA:             M,H       H
 HYPOT:                       H
 SINH:                      +/-H
 COSH:                        H
 SIN,COS,
  TAN:                                           M,0      *
 ASIN,ACOS
  ATAN2:     M,0

                    Сокращения:

        *    Значение возвращается со всеми неутерянными знача-
             щими цифрами;
        M    Выдается сообщение (ошибка EDOM);
        H    Возвращается HUGE;
        -H   Возвращается -HUGE;
        +/-H Возвращается HUGE или -HUGE;
        0    Возвращается 0.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк