Главная страница
Навигация по странице:

  • Прототип в

  • Возвращаемое

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

  • Переносимость

  • Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования


    Скачать 3.41 Mb.
    НазваниеПодпрограммы классификации Подпрограммы преобразования
    АнкорСправочник по функциям С++.doc
    Дата07.05.2018
    Размер3.41 Mb.
    Формат файлаdoc
    Имя файлаСправочник по функциям С++.doc
    ТипДокументы
    #18992
    КатегорияИнформатика. Вычислительная техника
    страница74 из 120
    1   ...   70   71   72   73   74   75   76   77   ...   120

    _matherr


    -----------------------------------------------------------------
    Назначение Программа обработки ошибок в вычислениях с пла-

    вающей точкой.
    Синтаксис #include

    double _matherr(_mexcep why, char *fun,

    double *arg1p, double *arg2p,

    double retval);
    Прототип в math.h
    Замечания _matherr служит указателем на обработчик ошибок

    во всех программах математической библиотеки;

    она вызывает matherr и обрабатывает значение,

    возвращаемое matherr. _matherr никогда не вызы-

    вается из программ пользователей.
    Где бы в математической библиотеке ни возникла

    ошибка, вызывается программа _matherr с нес-

    колькими аргументами.
    _matherr делает 4 вещи:
    * использует аргументы для заполнения структуры

    exeption
    * вызывает matherr с указателем на структуру

    exeption, чтобы проверить, может ли matherr

    обработать ошибку
    * проверяет значение, возвращенное matherr сле-

    дующим образом:
    если matherr вернула 0 (что указывает на

    то, что она не может обработать ошибку),

    _matherr устанавливает errno (см.дальше) и

    печатает сообщение об ошибке
    если matherr вернула ненулевое значение

    (что указывает на то, что matherr может

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

    навливает errno и не печатает сообщение об

    ошибке.
    * возвращает е->errval вызывающей программе.
    Следует отметить, что matherr может изменять

    e->retval для уточнения значения вызывающей

    программе.
    Когда _matherr устанавливает errno (основываясь

    на возвращенном 0), она помещает тип обнаружен-

    ной ошибки (из поля type структуры exeption) в

    errno: либо EDOM, либо ERANGE.
    Возвращаемое _matherr возвращает значение e->retval. Это

    значение значение первоначально равно входному параметру

    retval, переданному _matherr, и может быть мо-

    дифицировано matherr.
    Для результатов математических функций больших,

    чем MAXDOUBLE, retval по умолчанию равен макро-

    су HUGE_VAL того же знака, что и до обращения к
    matherr. Для результатов математических функций

    меньших, чем MINDOUBLE, retval устанавливается

    в 0 и передается _matherr. В обоих случаях, ес-

    ли matherr не изменяет e->errval, _matherr ус-

    танавливает errno в
    ERANGE - результат выходит за предел
    Смотри также matherr

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

    matherr


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

    модифицируемая пользователем.
    Синтаксис #include

    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

    #include
    int matherr (struct exception *a)

    {

    if ( a->type == DOMAIN )

    {

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

    {

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

    return(1);

    }

    }

    return (0);

    }

    -----------------------------------------------------------------
    1   ...   70   71   72   73   74   75   76   77   ...   120


    написать администратору сайта