Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624 Кб
Скачать
☆

3.2.3.7 Элементарные функции

Элементарными функциями называются функции стандартного прог­раммного обеспечения языка C++, которые хранятся в скомпилированном виде в специализированных служебных библиотеках и имеют предопреде­ленные имена.

Объявление элементарной функции (её прототип) формируется в соответствии с правилом:

прототип элементарной функции ::=

тип данного, идентификатор элементарной функции,

«(», [ тип данного, { «,», тип данного } ], «)»;

Прототип (иначе сигнатура) элементарной функции описывает тип возвра­щаемо­го функцией данного, идентификатор элементарной функции, список ти­пов параметров функции.

Прототипы основных элементарных функций описаны в заголовочных файлах math.h, Math.hpp, stdlib.h, limits.h, errno.h, которые должны быть включены в исходный код программы с помощью препроцессорной инструкции #include.

Арифметические выражения могут содержать вызовы элементарных функций, которые записываются в соответствии с правилом:

вызов элементарной функции ::=

идентификатор элементарной функции, «(», параметр, { параметр }, «)»;

Наиболее часто в инженерных расчетах используются функции, представленные в таблице 3.2.3.

Таблица 3.2.3

Прототип

Результат

Тригонометрические функции

double sin (double X)

значение sinX, где значение X задано в радианах

double sinh (double X)

значение sinhX (гиперболического синуса), где значение X задано в радианах

double cos (double X)

значение cosX, где значение X задано в радианах

double cosh (double X)

значение coshX (гиперболического косинуса), где значение X задано в радианах

double tan (double X)

значение tgX, где значение X задано в радианах

double tanh (double X)

значение tghX (гиперболического тангенса), где значение X задано в радианах

double asin (double X)

значение arcsinX, где X [-1; +1]

double acos (double X)

значение arccosX, где X [-1; +1]

double atan (double X)

значение arctgX

double atan2 (double X, double Y)

значение arctg(X/Y)

long double RadToDeg (long double Radians)

радианы, преобразованные в градусы

long double DegToRad (long double Radians)

градусы, преобразованные в радианы

double hypot (double X, double Y)

гипотенуза прямоугольного треугольника, рассчитанная по катетам X и Y

Алгебраические функции

int abs (int X)

значение |X|

long labs (long X)

значение |X|

double fabs (double X)

значение |X|

double ceil (double X)

значение X (округление вверх)

double floor (double X)

значение X (округление вниз

double exp (double X)

double remainder(double X, double Y)

остаток от деления X на Y

double exp2(double X)

значение 2Х

double ldexp (double X, double Y)

double log(double X)

значение lnX

double log10(double X)

значение lgX

long double log2(long double X)

max(X, Y)

максимальное значение из X и Y любых типов

min(X, Y)

минимальное значение из X и Y любых типов

double fmod(double X, double Y)

остаток от деления X на Y

double poly(double X, int N, Double C[ ])

значение полинома степени N

CN ∙ xN+ CN-1 ∙ xN-1 + ... + C1 ∙ x+ C0

double pow(double X, double Y)

double pow10(int X)

double sqrt (double X)

положительное значение X

double cbrtf(double X)

double modf (double X, double *Y)

возвращает дробную часть значения аргумента X, а целую часть сохраняет по адресу, на который указывает указатель *Y

double copysign(double X, double Y)

наделяет аргумент X знаком, который имеет аргумент Y, и возвращает полученный результат

Статистические функции

int random (int n)

случайное число из [0…n-1]

void randomize (void)

инициализированная функции random (n)

Большинство описанных в этой таблице функций оперирует данными типа double. Однако, существуют также и функции, работающие с аргумен­тами типа float и long double (их идентификаторы имеют, соответствнно, до­полнительный суффикс «f» и «l», например, sinhl(X)) и многие иные, с кото­рыми можно ознакомиться, изучив соответствующие указанные выше заго­ловочные файлы.

Пример использования элементарной функции в выражении:

k = 5 * cos(5.214);

Помимо объявления элементарных функций, в заголовочных файлах заданы специальные макроопределения (таблица 3.2.4), используемые этими функциями:

Таблица 3.2.4

HUGE_VAL

значение типа double, сигнализирующее о возникшем переполнении при выполнении математических операций

HUGE_VALF

версия макроса HUGE_VAL с типом float

HUGE_VALL

версия макроса HUGE_VAL с типом long double

INFINITY или

Infinity

значение, представляющее положительную бесконечность (1.0 / 0.0)

NegInfinity

значение, представляющее отрицательную бесконечность (-1.0 / 0.0)

MATHERRNO

встроенная глобальная переменная errno, используемая для вывода сообщений об ошибках

MATH_ERREXCEPT

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

NAN

значение, представляющее нeопределённость

(0.0 / 0.0)

NULL

значение, представляющее 0

math_errhandling

содержит ссылки на макросы MATH_ERRNO и/или MATH_ERR­EXCEPT, в зависимости от возникшей ситуации

Нарушение области определения функции (воникает, если аргумент функции не попадает в область её определения) приводит к возврату значения math_errhandling, по значению которого можно судить о выполнении других действий:

- если math_errhandling содержит значение MATH_ERRNO, то встроенная глобальная целая переменная errno устанавливается равной значению макроопределения EDOM (макроопределения EDOM и ERANGE определены в заголовочном файле errno.h и используются элементарными функциями);

- если math_errhandling содержит значение MATH_ERREXCEPT, то возбуждается исключение вещественного типа.

Ошибка переполнения (если функция генерирует результат, который слишком велик и потому не может быть представлен в машинном формате) приводит к тому, что функция возвращает значение макроопределения HUGE_VAL, а при потере значимости - нуль. Если math_errhandling содержит значение макроопределения MATH_ERRNO, то глобальная переменная errno устанавливается равной значению макроопределения ERANGE, свидетельствующему об ошибке выхода за пределы диапазона. Если же math_errhandling содержит значение макроопределения MATH_ERREX­CEPT, то возбуждается исключение вещественного типа.

В заголовочном файле math.h также определены общеиспользуемые математические постоянные (таблица 3.2.5).

Таблица 3.2.5

Постоянная

Значение

Смысл

M_E

2.71828182845904523536

e1

M_LOG2E

1.44269504088896340736

log2 e

M_LOG10E

0.434294481903251827651

lg e

M_LN2

0.693147180559945309417

ln 2

M_LN10

2.30258509299404568402

ln 10

M_PI

3.14159265358979323846

π

M_PI_2

1.57079632679489661923

π / 2

M_PI_4

0.785398163397448309616

π / 4

M_1_PI

0.318309886183790671538

1 / π

M_2_PI

0.636619772367581343076

2 / π

M_1_SQRTPI

0.564189583547756286948

1 /

M_2_SQRTPI

1.12837916709551257390

2 /

M_SQRT2

1.41421356237309504880

M_SQRT_2

0.707106781186547524401

/ 2

В заголовочном файле limits.h определены общеиспользуемые постоянные, характеризующие предельные значения данных (таблица 3.2.6).

Таблица 3.2.6

Постоянная

Значение

Смысл

MAXINT

0x7fffffff

максимальное

число типа int

MAXDOUBLE

1.7976931348623158E+308

максимальное

число типа double

MAXFLOAT

3.40282347E+38F

максимальное

число типа float

MAXLDOUBLE

1.1897314953572317649E+4932L

максимальное

число типа long double