Стандартная библиотека 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 - 1expm1(1) // 1.71828...
log1p(x)Вычислитьlog(1 + x), подходит для случаев, когда x близко к 0log1p(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 <iostream>
#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 <iostream>
#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++. Он предоставляет множество базовых математических функций, которые помогают разработчикам выполнять математические операции при написании программ.

    Другие расширения