Советы по программированию во вторник — это короткие статьи о различных интересных моментах, в основном из C++, но также и из других языков программирования, которые я использую. Вы также можете подписаться на хэштег #TuesdayCodingTips в Mastodon и LinkedIn.

Начиная с C++20, вы можете включать заголовок <numbers> и использовать многие часто используемые предварительно вычисленные математические константы, такие как Пи, Фи, квадратный корень из 2 и 3, натуральные логарифмы из 2 и 10 и многие другие! Более того, вы можете выбрать их точность, указав базовый тип через шаблон.

А начиная с C++17 заголовок <cmath> содержит некоторые специальные математические функции, о которых я никогда не слышал, например, цилиндрические функции Бесселя, связанные с ними полиномы Лежандра или дзета-функцию Римана.

#include <iostream>
#include <numbers>
#include <iomanip> // std::setprecision
#include <limits> // std::numeric_limits

template<typename T>
void printConstant(T value)
{
    std::cout << std::setprecision(std::numeric_limits<T>::digits10 + 1);
    std::cout << value << std::endl;
}

int main()
{
    using namespace std::numbers;
    printConstant(pi_v<float>);
    printConstant(pi_v<double>);
    printConstant(pi_v<long double>);

    /* Outputs:
    3.141593
    3.141592653589793
    3.141592653589793239
    */
}