МАТЕМАТИЧЕСКИЕ ФУНКЦИИ('math.H')

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ('math.h')

В этой части собрано множество разнообразных математических функций. Соответствующие им определения и объявления содержатся в 'math.h'. Обратим внимание на два определения из 'math.h', которые представляют собой определенный интерес.

  1. Бесконечность в типе double определяется как HUGE_VAL; многие функции возвращают это значение при переполнении.
  2. Структура exception используется при написании определенных Вами обработчиков ошибок для математических функций. Вы можете определить свой способ обработки ошибок для большинства этих функций, выбрав собственную версию matherr; см. описание функции matherr для выяснения подробностей.

Поскольку обработчик ошибок вызывает fputs, математические подпрограммы требуют заглушек (фиктивных модулей) или минимальных реализаций (имплементаций) для списка подпрограмм ОС, из fputs: close, fstat, isatty, lseek, read, sbrk, write. Cм. раздел "System Calls" в The Cygnum C Support Library, для получения помощи и примеров таких реализаций программ поддержки.

Альтернативные объявления математическик функций, позволяющие эффективнее использовать возможности машины, - но, как правило, хуже отслеживающие ошибки и могущие вызывать дополнительные трудности на некоторых машинах, - доступны при подключении 'fastmath.h' вместо 'math.h'.

Версия библиотеки

Существуют четыре различных версии программ математических библиотек: IEEE, POSIX, X/Open, и SVID. Версия может быть выбрана Вами в период прогона программы заданием глобальной переменной _LIB_VERSION, определенной в 'math.h'. Она может принимать значение одной из следующих констант, определенных в 'math.h': _IEEE_, _POSIX_, _XOPEN_, или _SVID_. Переменная _LIB_VERSION не является специальной для каждой части программы, и изменение ее сказывается на всех частях.

Версии библиотеки различаются только по принципу обработки ошибок.

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

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

В режиме X/Open переменная errno принимает соответствующее значение, вызывается функция matherr, но сообщение об ошибке не выводится.

В режиме SVID функции, в случае переполнения, не принимают значение бесконечности, а становятся равными 3.40282346638528860e+38, максимально возможному одноразрядному числу с плавающей точкой. Также переменной errno присваивается правильное значение, вызывается функция matherr, и, если matherr обращается в 0, то для некоторых ошибок выводится соответствующее сообщение. Например, в ответ на 'log(-1.0)' печатается сообщение об ошибке в стандартном виде вывода: log: DOMAIN error. По умолчанию реализуется режим X/Open.

Acos,acosf - арккосинус

#include <math.h> double acos(double x); float acosf(float x);

acos вычисляет арккосинус (arccos) от заданного аргумента. Аргумент для acos должен находиться в отрезке [-1,1].

acosf идентичен acos, различие состоит в типах (double и floats), с которыми проводятся вычисления.

acos и acosf возвращают значения в радианах на промежутке от 0 до pi.

Если х не в промежутке [-1,1], то возвращаемое значение есть NaN (not a number), глобальная переменная errno принимает значение EDOM, и в стандартном выводе выносится сообщение DOMAIN error.

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

Acosh, acoshf - обратный гиперболический косинус

#include <math.h> double acosh(double x); float acoshf(float x);

acosh вычисляет обратный гиперболический косинус, который определяется как ln(x + sqrt(sqr(x) - 1))

x должен быть больше либо равен 1.

acoshf аналогичен acosh с точностью до типов.

acosh и acoshf принимают вычисленные значения. Если х меньше 1, возвращается NaN, при этом errno получает значение EDOM.

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

Ни acosh, ни acoshf не удовлетворяют стандарту ANSI C. Не рекомендуется использовать их в программах, которые могут быть перенесены на другие машины.

Asin, asinf - арксинус

#include <math.h> double asin(double x); float asinf(float x);

asin вычисляет арксинус (arcsin) от заданного аргумента. Аргумент для asin должен находиться в отрезке [-1,1].

asinf идентичен asin, различие состоит в типах (double и float), с которыми проводятся вычисления.

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

asin и asinf возвращают значения в радианах в промежутке от -pi/2 до pi/2.

Если х не в промежутке [-1,1], то возвращаемое значение есть NaN (not a number), глобальная переменная errno принимает значение EDOM, и в стандартном выводе выносится сообщение DOMAIN error.

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

Atan, atanf - арктангенс

#include <math.h> double atan(double x); float atanf(float x);

atan вычисляет арктангенс (arctg) от заданного аргумента.

atanf аналогичен с точностью до типов.

atan и atanf возвращают значения в радианах на промежутке от -pi/2 до pi/2.

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

Exp, expf - экспонента

#include <math.h> double exp(double x); float expf(float x);

х exp и expf вычисляют значение экспоненты от х, e (где e - основание натуральной системы логарифмов, приблизительно равное 2.71828).

Вы можете использовать функцию matherr (не-ANSI) для выбора обработчика ошибок для этих функций.

В случае успеха exp и expf возвращают вычисленное значение. Если результат слишком мал, возвращается значение 0. Если результат слишком велик, возвращается значение HUGE_VAL. В обоих случаях errno принимает значение ERANGE.

exp coответствует стандарту ANSI. expf является расширением.

Zero

число, все биты которого - нули.

Subnormal

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

Normal

Число с показателем степени и с дробной частью.

Infinity

Число с показателем, состоящим из одних единиц (в битовом представлении) и нулевой дробью.

NAN

Число с показателем, состоящим из одних единиц, и ненулевой дробью.

isnan возвращает 1, если аргумент равен nan. isinf возвращает 1, если аргумент равен infinity. finite возвращает 1, если аргумент равен zero, subnormal или normal. isnanf, isinff и finitef производят те же действия, что и их аналоги isnan, isinf и finite, но с одноразрядными числами с плавающей точкой.

2.26 ldexp, ldexpf - задание показателя

#include <math.h> double ldexp(double val, int exp); float ldexpf(float val, int exp);

ldexp вычисляет величину val*(p**exp). ldexpf аналогична с точностью до типов.

ldexp и ldexpf возвращают вычисленные значения.

При переполнении в обе стороны переменной errno присваивается значение ERANGE. При переполнении в отрицательную сторону ldexp и ldexpf приобретают значение 0.0. При переполнении в положительную сторону ldexp становится равной HUGE_VAL со знаком плюс или минус.

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

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-функция.

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

#include <math.h> 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 является расширением.

Tan, tanf - тангенс

#include <math.h> double tan(double x); float tanf(float x);

tan вычисляет тангенс аргумента х. Углы определены в радианах.

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

Возвращается значение тангенса от х.

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

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ('math.h')

В этой части собрано множество разнообразных математических функций. Соответствующие им определения и объявления содержатся в 'math.h'. Обратим внимание на два определения из 'math.h', которые представляют собой определенный интерес.

  1. Бесконечность в типе double определяется как HUGE_VAL; многие функции возвращают это значение при переполнении.
  2. Структура exception используется при написании определенных Вами обработчиков ошибок для математических функций. Вы можете определить свой способ обработки ошибок для большинства этих функций, выбрав собственную версию matherr; см. описание функции matherr для выяснения подробностей.

Поскольку обработчик ошибок вызывает fputs, математические подпрограммы требуют заглушек (фиктивных модулей) или минимальных реализаций (имплементаций) для списка подпрограмм ОС, из fputs: close, fstat, isatty, lseek, read, sbrk, write. Cм. раздел "System Calls" в The Cygnum C Support Library, для получения помощи и примеров таких реализаций программ поддержки.

Альтернативные объявления математическик функций, позволяющие эффективнее использовать возможности машины, - но, как правило, хуже отслеживающие ошибки и могущие вызывать дополнительные трудности на некоторых машинах, - доступны при подключении 'fastmath.h' вместо 'math.h'.

Версия библиотеки

Существуют четыре различных версии программ математических библиотек: IEEE, POSIX, X/Open, и SVID. Версия может быть выбрана Вами в период прогона программы заданием глобальной переменной _LIB_VERSION, определенной в 'math.h'. Она может принимать значение одной из следующих констант, определенных в 'math.h': _IEEE_, _POSIX_, _XOPEN_, или _SVID_. Переменная _LIB_VERSION не является специальной для каждой части программы, и изменение ее сказывается на всех частях.

Версии библиотеки различаются только по принципу обработки ошибок.

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

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

В режиме X/Open переменная errno принимает соответствующее значение, вызывается функция matherr, но сообщение об ошибке не выводится.

В режиме SVID функции, в случае переполнения, не принимают значение бесконечности, а становятся равными 3.40282346638528860e+38, максимально возможному одноразрядному числу с плавающей точкой. Также переменной errno присваивается правильное значение, вызывается функция matherr, и, если matherr обращается в 0, то для некоторых ошибок выводится соответствующее сообщение. Например, в ответ на 'log(-1.0)' печатается сообщение об ошибке в стандартном виде вывода: log: DOMAIN error. По умолчанию реализуется режим X/Open.

Acos,acosf - арккосинус

#include <math.h> double acos(double x); float acosf(float x);

acos вычисляет арккосинус (arccos) от заданного аргумента. Аргумент для acos должен находиться в отрезке [-1,1].

acosf идентичен acos, различие состоит в типах (double и floats), с которыми проводятся вычисления.

acos и acosf возвращают значения в радианах на промежутке от 0 до pi.

Если х не в промежутке [-1,1], то возвращаемое значение есть NaN (not a number), глобальная переменная errno принимает значение EDOM, и в стандартном выводе выносится сообщение DOMAIN error.

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

Наши рекомендации