Стандартная библиотека C++

Математические константы и операции

Последнее обновление: 13.02.2023

Математические константы

Начиная со стандарта 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. В отличие от большинства функций , 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): вычисляет выражение 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
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850