Начиная со стандарта 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