Начиная со стандарта 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
Заголовочный файл <cmath> стандартной библиотеки C++ определяет набор математических функций. которые можно использовать в программах. Перечислю наиболее распространенные:
abs(arg)
: вычисляет абсолютное значение 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)
: вычисляет выражение earg
.
log(arg)
: вычисляет натуральный логарифм (по основанию e) числа arg.
log10(arg)
: вычисляет логарифм по основанию 10 от arg.
pow(arg1, arg2)
: вычисляет значение arg1, возведенное в степень arg2, то есть arg1arg2
. Числа 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 <iostream> #include <math.h> // подключаем заголовочный файл math.h int main() { std::cout << "abs(-3) = " << std::abs(-3)<< "\n"; std::cout << "pow(-3, 2) = " << std::pow(-3, 2)<< "\n"; std::cout << "round(-3.4) = " << std::round(-3.2)<< "\n"; std::cout << "ceil(3.2) = " << std::ceil(3.2)<< "\n"; std::cout << "floor(3.2) = " << std::floor(3.2)<< "\n"; std::cout << "ceil(-3.2) = " << std::ceil(-3.2)<< "\n"; std::cout << "floor(-3.2) = " << std::floor(-3.2)<< "\n"; }
Консольный вывод:
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 <iostream> #include <math.h> int main() { double a{ 1.5 }, b{-1.5}, 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) << std::endl; }
Консольный вывод:
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