- •Данных. Составные структуры данных
- •3.2.1 Общие положения
- •3.2.1.1 Алфавит языка
- •3.2.1.2 Формат программы
- •3.2.1.3. Комментарии
- •// Пример однострочного комментария
- •3.2.2.2 Типы данных
- •3.2.1.4 Зарезервированные слова
- •3.2.2 Данные
- •3.2.2.1 Идентификаторы данных
- •3.2.2.3 Постоянные
- •3.2.2.4 Переменные
- •3.2.2.5 Массивы
- •3.2.2.6 Структуры
- •3.2.2.7 Объединения
- •Масив X:
- •Адреса элементу:
- •Масив y:
- •3.2.2.8 Перечисления
- •3.2.2.9 Указатели
- •Int Hour;
- •Int Press;
- •3.2.2.9.1 Динамическое выделения памяти для хранения данных
- •3.2.2.9.2 Динамическое освобождение памяти от хранимых данных
- •3.2.2.9.3 Ссылка
- •3.2.2.10 Множества
- •3.2.3 Выражения
- •3.2.3.1 Арифметические операции
- •Char int float | signed unsigned | short (базовый) long
- •3.2.3.2 Битовые операции
- •3.2.3.2 Логические операции
- •3.2.3.4 Операции отношения
- •3.2.3.5 Операция присваивания
- •3.2.3.6 Специальные операции
- •3.2.3.7 Элементарные функции
- •3.8 Приведение типов данных
- •3.2.3.9 Приоритеты операций
- •3.2.3.10 Адресные выражения
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_ERREXCEPT, в зависимости от возникшей ситуации |
Нарушение области определения функции (воникает, если аргумент функции не попадает в область её определения) приводит к возврату значения 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_ERREXCEPT, то возбуждается исключение вещественного типа.
В заголовочном файле 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 |
