Matherr - изменяемый обработчик математических ошибок

#include int matherr(struct exception *e);

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

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

Ниже представлена структура exception (определенная в 'math.h'):

struct exception { int type; char *name; double arj1, arj2, retval; int err; };

Поля структуры exception имеют следующие значения:

Type

Тип произошедшей ошибки. Множество закодированных типов ошибок также находится в 'math.h'.

Name

Указатель на строку, заканчивающуюся нулем, содержащую имя той функции из математической библиотеки, в которой произошла ошибка.

Arj1, arj2

Аргументы, вызвавшие ошибку.

Retval

Возвращаемое значение ошибки (то значение, которое будет иметь вызываемая функция).

Err

Если не ноль, то это новое значение, присвоенное errno.

Типы ошибок, определенные в 'math.h' представлают собой возможные математические ошибки типа:

DOMAIN

Аргумент не в области определения функции; например log(-1.0).

SING

Предполагаемые вычисления привели бы к появлению особой точки, например pow(0.0, -2.0).

OVERFLOW

Вычисления привели бы к результату слишком большому для представления, например exp(1000.0).

UNDERFLOW

Вычисления привели бы к результату слишком маленькому для представления, например exp(-1000.0).

TLOSS

Полная потеря разрядности. Результат не имел бы значащих цифр, например sin(10e70).

PLOSS

Частичная потеря разрядности.

Библиотечное определение matherr возвращает 0 во всех случаях.

Вы можете изменить результат вызываемой функции совершив в matherr изменение e->retval; этот результат передается к источнику вызова.

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

matherr - не ANSI-функция.

Modf, modff - разбиение на дробную и целую части

#include double modf(double val, double *ipart); float modff(float val, float *ipart);

modf разделяет переменную val типа double на целую и дробную части, возвращая дробную часть и сохраняя целую в *ipart. Не происходит никакого округления, сумма дробной и целой частей гарантированно составит val. То есть, если realpart = mod(val, &intpart); тогда 'realpart + intpart' в точности будет равняться val.



modff идентичен с точностью до типов.

Возвращается дробная часть. Знак результата совпадает со знаком исходного аргумента val.

modf удовлетворяет стандарту ANSI C. modff является расширением.

Nan, nanf - представление бесконечности

#include double nan(void); float nanf(void);

nan и nanf возвращают NaN, определенный в IEEE, двойной и одинарной точности соответственно.

Nextafter, nextafterf - получение ближайшего числа

#include double nextafter(double val, double dir); float nextafterf(float val, float dir);

nextafter возвращает число с плавающей точкой двойной точности ближайшее к val в направлении к числу dir. nextafterf производит те же действия с одинарной точостью. Например, nextafter(0.0,1.0) возвращает наименьшее положительное число двойной точности.

возвращает число ближайшее к val в направлении к dir число.

Ни nextafter, ни nextafterf не входят в ANSI C и System V Interface Definition.

Pow, powf - x в степени y

#include double pow(double x, double y); float powf(float x, float y);

pow и powf вычисляют x в степени y.

В случае успеха возвращается вычисленное значение.

Когда происходит переполнение, pow возвращает HUGE_VAL а errno получает значение ERANGE. Ecли входной х отрицателен, а y - не целое число, тогда errno принимает значение EDOM. Если оба аргумента равны 0, pow и powf возвращают 1.

Вы можете изменить обработку ошибок для этих функций, используя matherr.

pow отвечает стандарту ANSI C. powf является расширением.


maya-2017-goda-blagotvoritelnaya-vistavka-iprovedenie-master-klassov-po-zhivopisiv-starogorodkovskoj-specialnoj-shkole-internate-imeni-av-furgaginoj.html
maya-comes-in-disguise-sb-nv-200690.html
    PR.RU™