Include cmath c что это
Минимальная программа на С++ состоит из одной функции main, именно с нее начинается работа программы. Однако, мы можно (и нужно) пользоваться другими функциями. В языке С++ существует большое количество функций стандартной библиотеки STL ( глава 2), а также можно определять свои собственные функции.
1.9.1 Использование функций библиотеки STL (пример 11)
Стандартная библиотека C++ предлагает широкий набор функций для выполнения математических вычислений, операций со строками и символами, ввода-вывода, обработки ошибок и многих других полезных операций. Это облегчает работу программистов, поскольку эти функции реализуют многое из того, что им обычно требуется. Прототипы функций размещаются в заголовочных файлах, так что они могут использоваться любыми программами, включающими соответствующий заголовочный файл.
Например, в языке С++ не существует оператора возведения в степень, но зато есть функция возведения в степень, которой можно воспользоваться. Для этого нужно подключить заголовочный файл и в обратиться к функции pow() в теле программы.
///////////////////////////////////////////////////////////////////////////// // Прикладное программирование // Пример 11. Обращение к фукнции возведения числа в степень // // Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru // Университет ИТМО ///////////////////////////////////////////////////////////////////////////// // подключение библиотеки ввода-вывода #include // подключение математической библиотеки #include // подключение стандартного пространства имен для использования библиотек using namespace std; ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() < double pi=3.14; // возведение числа в степень // обращение к функции - пример 1 double power = pow(3.14, 2); // обращение к функции - пример 1 power = pow(pi, 2); // обращение к функции - пример 3 cout </////////////////////////////////////////////////////////////////////////////
Функция pow() возводит число 3.14 в квадрат и присваивает полученный результат переменной power, где pow — имя функции; числа 3.14 и 2 — аргументы функции. В качестве аргументов функции может быть число или переменная соответствующего типа.
Аргументы перечисляются в скобках после имени функции, если аргументов несколько, то они отделяются друг от друга запятыми.
1.9.2 Определение новых функций
Определение (реализация) функции
Определение функции осуществляется следующим образом:
в общем виде
пример
тип имя(список аргументов с типами) < инструкции return возвращ.знач.; >
double plus(double x, double y) < return x+y; >
Тип возвращаемого значения может быть целым, вещественным, и т.д., кроме того, функция может не возвращать никакого значения, тогда при ее определении (и описании) указывают тип void.
void print_value(double res) < cout"result is: "
Во время выполнения какой-либо функции управление возвращается в вызывающую программу, когда программа достигает закрывающей фигурной скобки или при исполнении оператора return. Если функция не возвращает никакого значения, оператор return должен быть «пустым», а если возвращает – после оператора return указывается возвращаемое значение. Для функции, не возвращающей никакого значения, наличие оператора return не является обязательным.
Описание функции (прототип)
Обычно функции снабжаются прототипами, которые помещаются в отдельный заголовочный (header) файл или в начале файла. Прототипом называется объявление функции:
в общем виде
пример
возвращ.тип имя (список аргументов с типами);
double plus(double x, double y)
Компилятор сверяется с прототипом функции, чтобы проверить, содержат ли вызовы функции правильное число аргументов нужных типов и перечислены ли типы аргументов в правильном порядке. Кроме того, прототип функции необходим компилятору для того, чтобы убедиться, что возвращаемое функцией значение корректно используется в вызвавшем функцию выражении (например, вызов функции, возвращающий void, не может входить в правую часть оператора присваивания). Каждый аргумент должен быть совместим с типом соответствующего параметра. Например, параметр типа double может принимать значения 7.35, 22 или -0.03456, но не строку вроде «hello». Если передаваемые функции аргументы не совпадают по типу с параметрами, указанными в прототипе функции, компилятор пытается преобразовать аргументы к соответствующему типу.
Обращение к функции (вызов функции)
Каждому параметру в определении функции (формальный параметр функции) должен соответствовать один аргумент в вызове функции. В данном примере, когда функция вызывается, параметр функции х инициализируется значением аргумента b, параметр у инициализируется значением аргумента c, а возвращаемое значение присваивается переменной a.
имя (список аргументов);
double a, b, c; a=plus(b, c);
1.9.3 Пример функции (пример 12)
В примере используются две функции – функция сложения двух чисел и функция печати числа на экран. Значение функции plus можно присвоить какой-то переменной, или использовать прямо при вызове другой функции или при использовании оператора cout.
///////////////////////////////////////////////////////////////////////////// // Прикладное программирование // Пример 12. Функция сложения двух чисел // // Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru // Университет ИТМО ///////////////////////////////////////////////////////////////////////////// // подключение библиотеки ввода-вывода #include // подключение стандартного пространства имен для использования библиотек using namespace std; // объявление функции (прототип функции) // функция складывает два числа double plus(double x, double y); // функция печати результата void print_value(double res); ///////////////////////////////////////////////////////////////////////////// // функция main начинает исполнение программы void main() < // объявление и инициализация двух переменных double x1=1, x2=2; // обращение к функции - пример 1 double res = plus(x1, x2); // обращение к функции - пример 2 res = plus(55.5, res); print_value(res); // обращение к функции - пример 3 cout<// обращение к функции - пример 4 print_value(plus(res, x2)); > ///////////////////////////////////////////////////////////////////////////// // Определение (реализация) функции сложения двух чисел double plus(double x, double y) < return x+y; > ///////////////////////////////////////////////////////////////////////////// // Определение (реализация) функции печати результата void print_value(double res) < cout"result is: " /////////////////////////////////////////////////////////////////////////////
Математические функции в С++
В С++ определены в заголовочном файле функции выполняющие некоторые часто используемые математические задачи. Например, нахождение корня, возведение в степень, sin() , cos() и многие другие. В таблице 1 показаны основные математические функций, прототипы которых содержатся в заголовочном файле .
| Функция | Описание | Пример |
|---|---|---|
| abs( a ) | модуль или абсолютное значение от а | abs(-3.0)= 3.0 abs(5.0)= 5.0 |
| sqrt(a) | корень квадратный из а, причём а не отрицательно | sqrt(9.0)=3.0 |
| pow(a, b) | возведение а в степень b | pow(2,3)=8 |
| ceil( a ) | округление а до наименьшего целого, но не меньше чем а | ceil(2.3)=3.0 ceil(-2.3)=-2.0 |
| floor(a) | округление а до наибольшего целого, но не больше чем а | floor(12.4)=12 floor(-2.9)=-3 |
| fmod(a, b) | вычисление остатка от a/b | fmod(4.4, 7.5) = 4.4 fmod( 7.5, 4.4) = 3.1 |
| exp(a) | вычисление экспоненты е а | exp(0)=1 |
| sin(a) | a задаётся в радианах | |
| cos(a) | a задаётся в радианах | |
| log(a) | натуральный логарифм a(основанием является экспонента) | log(1.0)=0.0 |
| log10(a) | десятичный логарифм а | Log10(10)=1 |
| asin(a) | арксинус a, где -1.0 < а < 1.0 | asin(1)=1.5708 |
Необходимо запомнить то, что операнды данных функций всегда должны быть вещественными, то есть a и b числа с плавающей точкой. Это связано с тем, что существует несколько экземпляров перегруженных функций, соответствующих списку аргументов. Тему перегруженные функции рассмотрим немного позже, а пока надо запомнить, что a и b числа с плавающей точкой. Разработаем программу, которая будет использовать математические функции.
// math_func.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include #include using namespace std; int main(int argc, char* argv[]) < cout
// math_func.cpp: определяет точку входа для консольного приложения. #include #include using namespace std; int main(int argc, char* argv[]) < cout
Итак, чтобы воспользоваться данными функциями необходимо подключить заголовочный файл как в строке 5, после чего можно использовать любую из функций, прототипы которых находятся в этом заголовочном файле. Результат работы программы (см. Рисунок 1).
CppStudio.com
log10(10) = 1 log10(1) = 0 log(2.718281) = 1 sqrt(9) = 3 pow(2,3) = 8 abs(0) = 0 abs(-5) = 5 ceil(3.14) = 4 ceil(-2.4) = -2 floor(3.14) = 3 floor(-2.4) = -3 fmod(2.4/2.0) = 0.4
Рисунок 1 — Математические функции в С++
Чтобы увидеть полный перечень функций в данном заголовочном файле, просто откройте его. Сделать это можно либо через поиск, либо через обозреватель решений, если программируете в MVS (см. Рисунок 2). В «Обозревателе решений» открываем вложенный каталог «Внешние зависимости«, в нём находим файл cmath . Открыв его, можно увидеть полный список математических функций.

Рисунок 2 — Математические функции в С++
Открыть заголовочный файл можно, нажав правой кнопкой мыши по его имени, как показано на рисунке 3. В появившемся окне выбираем пункт Открыть документ .

Рисунок 3 — Математические функции в С++
К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!
Стандартная библиотека C++
Начиная со стандарта C++20 стандартная библиотека предоставляет модуль numbers , который содержит ряд встроенных математических констант. Некоторые наиболее распростраенные:
- std::numbers::e : число 2.71828 (основание натурального алгоритма)
- std::numbers::pi : число π - 3.14159.
- std::numbers::sqrt2 : квадратный корень числа 2 - 1.41421.
- std::numbers::phi : золотое сечение (число Фидия) φ - 1.618.
Все эти числа представляют тип double
Математические функции
Заголовочный файл стандартной библиотеки C++ определяет набор математических функций. которые можно использовать в программах. Перечислю наиболее распространенные:
- abs(arg) : вычисляет абсолютное значение arg. В отличие от большинства функций , abs() возвращает целочисленный тип, если arg является целым числом.
- ceil(arg) : вычисляет ближайшее целое число, большее или равное arg, и возвращает его в виде числа с плавающей точкой. Например, выражение std::ceil(2.5) возвращает 3.0 , а std::ceil(-2.5) - -2.0 . (дробная часть округляется до единицы)
- floor(arg) : вычисляет ближайшее целое число, меньшее или равное arg, и возвращает его в виде числа с плавающей точкой. Например, выражение std::floor(2.5) возвращает 2.0, а std::floor(-2.5) - число -3.0. (дробная часть округляется до нуля)
- exp(arg) : вычисляет выражение e arg .
- log(arg) : вычисляет натуральный логарифм (по основанию e) числа arg.
- log10(arg) : вычисляет логарифм по основанию 10 от arg.
- pow(arg1, arg2) : вычисляет значение arg1, возведенное в степень arg2, то есть arg1 arg2 . Числа arg1 и arg2 могут быть целочисленными или с плавающей запятой. Так, результат std::pow(2, 3) равен 8.0, а std::pow(4, 0,5) равно 2,0.
- sqrt(arg) : вычисляет квадратный корень из arg.
- round(arg) , lround (arg) и llround (arg) округляют число до ближайщего целого. Разница между ними состоит в типа возвращаемого результата: round() возвращает число с плавающей точкой, lround (arg) - число long , а llround (arg) - long long . Половинные значения округляются до нуля: std::lround(0.5) возвращает 1L , тогда как std::round(-1.5f) возвращает -2.0f.
- sin(arg) : вычисляет синус угла, при этом arg представляет значение в радианах.
- cod(arg) : вычисляет косинус угла.
- tan(arg) : вычисляет тангенс угла.
- isinf(arg) : возвращает true , если аргумент представляет +-бесконечность.
- isnan(arg) : возвращает true , если аргумент представляет NaN.
Пример применения некоторых функций:
#include #include // подключаем заголовочный файл math.h int main()
abs(-3) = 3 pow(-3, 2) = 9 round(-3.4) = -3 ceil(3.2) = 4 floor(3.2) = 3 ceil(-3.2) = -3 floor(-3.2) = -4
Проверка результата арифметических операций на NaN и бесконечность:
#include #include int main() < double a< 1.5 >, b, c<>, d <>; std::cout << a << "/" << b << " is Infinity? " << std::isinf(a / b) << std::endl; std::cout << a << "/" << b << " is Nan? " << std::isnan(a / b) << std::endl; std::cout << a << "/" << c << " is Infinity? " << std::isinf(a / c) << std::endl; std::cout << c << "/" << d << " is NaN? " << std::isnan(c / d)
1.5/-1.5 is Infinity? 0 1.5/-1.5 is Nan? 0 1.5/0 is Infinity? 1 0/0 is NaN? 1
Математическая библиотека языков C и C++
В стандартную математическую библиотеку языка Си (а, значит, и C++) входит множество специальных математических функций, которые нужно знать и уметь использовать. Для того, чтобы использовать эти функции в своей программе, необходимо подключить заголовочный файл, содержащий описания этих функций, что делается строчкой в начале программы:
#include
В языке C++ нужно указывать название заголовочного файла так:
#include
Функция от одного аргумента вызывается, например, так: sin(x) . Вместо числа x может быть любое число, переменная или выражение. Функция возвращает значение, которое можно вывести на экран, присвоить другой переменной или использовать в выражении:
y = sin(x);
printf("%lf", sqrt(2));
| Функция | Описание |
|---|---|
| Округление | |
| round | Округляет число по правилам арифметики, то есть round(1.5) == 2 , round(-1.5) == -2 |
| floor | Округляет число вниз (“пол”), при этом floor(1.5) == 1 , floor(-1.5) == -2 |
| ceil | Округляет число вверх (“потолок”), при этом ceil(1.5) == 2 , ceil(-1.5) == -1 |
| trunc | Округление в сторону нуля (отбрасывание дробной части), при этом trunc(1.5) == 1 , trunc(-1.5) == -1 |
| fabs | Модуль (абсолютная величина) |
| Корни, степени, логарифмы | |
| sqrt | Квадратный корень. Использование: sqrt(x) |
| cbrt | Кубический корень. Использование: cbrt(x) |
| pow | Возведение в степень, возвращает a b . Использование: pow(a,b) |
| exp | Экспонента, возвращает e x . Использование: exp(x) |
| log | Натуральный логарифм |
| log10 | Десятичный логарифм |
| Тригонометрия | |
| sin | Синус угла, задаваемого в радианах |
| cos | Косинус угла, задаваемого в радианах |
| tan | Тангенс угла, задаваемого в радианах |
| asin | Арксинус, возвращает значение в радианах |
| acos | Арккосинус, возвращает значение в радианах |
| atan | Арктангенс, возвращает значение в радианах |
Также в файле cmath есть набор полезных числовых констант, например, константа M_PI хранит значение числа \(\pi\).
В компиляторе Visual C++ для использования этих констант необходимо объявить директиву препроцессора _USE_MATH_DEFINES перед подключения заголовочного файла cmath .
#define _USE_MATH_DEFINES #include
Деление действительных чисел
Для действительных чисел определены операции сложения, вычитания, умножения и деления.
При этом операция деления выполняется по-разному для переменных и констант целочисленного типа и для переменных и констант действительных типов. В первом случае деление производится нацело с отбрасыванием дробной части, во втором случае — деление производится точно и результатом является действительное число. Более точно, если делимое и делитель одновременно являются целочисленными константами или переменными целочисленных типов, то деление будет целочисленным, а если хотя бы одно из них действительное, то деление будет действительным. Например:
printf("%lf\n", 10 / 3);
printf("%lf\n", 10. / 3);
printf("%lf\n", 10 / 3.);
printf("%lf\n", 10. / 3.);
выведет 3 в первой строке и 3.33333 в остальных строках.
Результат выполнения деления не зависит от того, какой переменной будет присвоен результат. Если написать double a = 10 / 3; , то переменная a будет равна 3, так как деление 10/3 будет целочисленным, независимо от того, чему будет присвоен результат.