Стандартная библиотека C++<cmath>
Стандартная библиотека C++ предоставляет множество возможностей, среди которых<cmath>является заголовочным файлом, содержащим математические функции и предоставляющим множество базовых математических операций и констант.
<cmath>является заголовочным файлом в стандартной библиотеке C++, который определяет набор математических функций, способных выполнять базовые математические операции, такие как возведение в степень, тригонометрические функции, логарифмы, абсолютные значения и т. д.
Чтобы использовать<cmath>Для функций из него необходимо включить этот заголовочный файл в вашу программу на C++:
#include <cmath>
Общие функции
<cmath>предоставляет множество математических функций; вот некоторые из часто используемых.
1. Базовые математические функции
| Функция | Особенности | Пример |
|---|---|---|
abs(x) | Вычислить абсолютное значениеxцелого числа | abs(-5) // 5 |
fabs(x) | Вычислить число с плавающей запятойxцелого числа | fabs(-5.5) // 5.5 |
fmod(x, y) | Вычислитьxразделить наyостаток | fmod(5.3, 2) // 1.3 |
remainder(x, y) | Вычислитьxразделить наyостаток | remainder(5.5, 2) // 1.5 |
fmax(x, y) | returnxиyбольшее значение | fmax(3.5, 4.2) // 4.2 |
fmin(x, y) | returnxиyменьшее значение | fmin(3.5, 4.2) // 3.5 |
hypot(x, y) | Вычислитьsqrt(x*x + y*y) | hypot(3, 4) // 5 |
2. Показательные и логарифмические функции
| Функция | Особенности | Пример |
|---|---|---|
exp(x) | Вычислитьe^x,eоснование натурального логарифма | exp(1) // 2.71828... |
log(x) | Вычислитьxнатуральный логарифм ⟦0⟧ | log(2.71828) // 1 |
log10(x) | Вычислитьxдесятичный логарифм от ⟦0⟧ | log10(100) // 2 |
pow(x, y) | Вычислитьxизyстепень | pow(2, 3) // 8 |
sqrt(x) | Вычислитьxквадратный корень из ⟦0⟧ | sqrt(16) // 4 |
cbrt(x) | Вычислитьxкубический корень из ⟦0⟧ | cbrt(27) // 3 |
expm1(x) | Вычислитьe^x - 1 | expm1(1) // 1.71828... |
log1p(x) | Вычислитьlog(1 + x), подходит для случаев, когда x близко к 0 | log1p(0.00001) // 0.00001 |
3. Тригонометрические функции
| Функция | Особенности | Пример |
|---|---|---|
sin(x) |
Вычислитьxсинус,xВ радианах |
sin(3.14159 / 2) // 1 |
cos(x) |
Вычислитьxкосинус,xВ радианах |
cos(3.14159) // -1 |
tan(x) |
Вычислитьxтангенс,xВ радианах |
tan(0) // 0 |
asin(x) |
Вычислитьxарксинус, возвращает значение в радианах |
asin(1) // 3.14159/2 |
acos(x) |
Вычислитьxарккосинус, возвращает значение в радианах |
acos(-1) // 3.14159 |
atan(x) |
Вычислитьxарктангенс, возвращает значение в радианах |
atan(1) // 3.14159/4 |
atan2(y, x) |
Вычислитьy/xарктангенс, возвращает значение в радианах |
atan2(1, 1) // 3.14159/4 |
4. Гиперболические функции
| Функция | Особенности | Пример |
|---|---|---|
sinh(x) |
Вычислитьxгиперболический синус |
sinh(0) // 0 |
cosh(x) |
Вычислитьxгиперболический косинус |
cosh(0) // 1 |
tanh(x) |
Вычислитьxгиперболический тангенс от |
tanh(1) // 0.7616 |
asinh(x) |
Вычислитьxобратный гиперболический синус от |
asinh(1) // 0.8814 |
acosh(x) |
Вычислитьxобратный гиперболический косинус от,x ≥ 1 |
acosh(1) // 0 |
atanh(x) |
Вычислитьxобратный гиперболический тангенс от,xна (-1, 1) |
atanh(0.5) // 0.5493 |
5. Округление и операции с плавающей запятой
| Функция | Особенности | Пример |
|---|---|---|
ceil(x) |
Возвращает не меньше чемxнаименьшее целое число |
ceil(2.3) // 3 |
floor(x) |
Возвращает не больше чемxнаибольшее целое число |
floor(2.3) // 2 |
trunc(x) |
Возвращает целочисленное значение с отброшенной дробной частью | trunc(2.8) // 2 |
round(x) |
Возвращает ближайшее целое число после округления | round(2.5) // 3 |
lround(x) |
Возвращает округлённое доlongType |
lround(2.5) // 3 |
llround(x) |
Возвращает округлённое доlong longType |
llround(2.5) // 3 |
nearbyint(x) |
возвращает округление до ближайшего целого (но не вызывает исключений с плавающей запятой) | nearbyint(2.5) // 2 |
rint(x) |
возвращает округление до целого в соответствии с текущим режимом округления | rint(2.5) // 3 |
modf(x, &intpart) |
будетxРазделяет целую и дробную части |
modf(2.3, &intpart) |
6. Проверки чисел с плавающей запятой
| Функция | Особенности | Пример |
|---|---|---|
isfinite(x) |
Проверяетxявляется ли оно конечным значением (не бесконечностью или NaN) |
isfinite(3.0) // true |
isinf(x) |
Проверяетxявляется ли оно бесконечностью |
isinf(1.0 / 0.0) // true |
isnan(x) |
Проверяетxявляется ли оно NaN |
isnan(0.0 / 0.0) // true |
isnormal(x) |
ПроверяетxЯвляется ли оно нормальным ненулевым числом с плавающей запятой |
isnormal(1.0) // true |
signbit(x) |
Проверяетxявляется ли знак отрицательным |
signbit(-5.3) // true |
Пример
Ниже приведён пример использования<cmath>Простой пример использования , демонстрирующий, как вычислить квадратный корень, синус и абсолютное значение числа.
Пример 1
#include <cmath> // подключить заголовочный файл <cmath>
int main() {
double num = 9.0;
double root = sqrt(num); // вычислить квадратный корень
double sinValue = sin(M_PI / 2); // Вычислить значение синуса, M_PI — приближение числа π
double absValue = abs(-5.0); // Вычислить абсолютное значение
std::cout << "Квадратный корень из " << num << " равен " << root << std::endl;
std::cout << "Синус " << M_PI / 2 << " равен " << sinValue << std::endl;
std::cout << "Абсолютное значение -5.0 равно " << absValue << std::endl;
return 0;
}
Вывод:
The square root of 9 is 3 The sine of 1.570796 is 1 The absolute value of -5 is 5
Пример 2
#include <cmath>
int main() {
// Основные математические операции
std::cout << "abs(-5) = " << abs(-5) << std::endl;
std::cout << "fmod(5.3, 2) = " << fmod(5.3, 2) << std::endl;
// Экспоненциальные и логарифмические функции
std::cout << "exp(1) = " << exp(1) << std::endl;
std::cout << "log(2.71828) = " << log(2.71828) << std::endl;
std::cout << "pow(2, 3) = " << pow(2, 3) << std::endl;
// Тригонометрические функции
std::cout << "sin(3.14159 / 2) = " << sin(3.14159 / 2) << std::endl;
std::cout << "cos(3.14159) = " << cos(3.14159) << std::endl;
// Функции округления
std::cout << "ceil(2.3) = " << ceil(2.3) << std::endl;
std::cout << "floor(2.3) = " << floor(2.3) << std::endl;
// Проверки чисел с плавающей точкой
double x = 1.0 / 0.0;
if (isinf(x)) {
std::cout << "x является бесконечным" << std::endl;
}
return 0;
}
Примечания
<cmath>Функции в обычно принимаютfloatилиdoubleаргументы типа и возвращают результаты соответствующего типа. Дляlong doubleтип, можно использовать<cmath>функции в , но нужно добавить после имени функцииlсуффикс, напримерsqrtl。- Некоторые функции, такие как
powиlog, можно передавать целые числа в качестве аргументов, но результат всё равно будет числом с плавающей запятой. <cmath>функции в могут выбрасывать исключения, например когдаsqrtКогда аргумент функции отрицательный, она выбрасываетstd::domain_errorисключение.
<cmath>— очень полезный заголовочный файл в стандартной библиотеке C++. Он предоставляет множество базовых математических функций, которые помогают разработчикам выполнять математические операции при написании программ.