What is C++ std::numbers?

The C++20 standard introduced a compelling library feature, std::numbers, aimed at enriching the language’s support for mathematical constants. This addition, part of the <numbers> header, provides compile-time constants for a variety of mathematical values. These constants offer precision and ease of use that can significantly improve the readability and accuracy of mathematical computations in C++ programs.

Introduction to std::numbers

The std::numbers library is a static collection of mathematical constants with varying degrees of precision, depending on the type. It includes well-known constants such as ππ (pi), ee (Euler’s number), and many others, facilitating their use without the need for manual definition or inclusion of external libraries.

Key features and benefits

  • Precision: The constants in std::numbers are defined as constexpr and are template-specialized for different floating-point types, including float, double, and long double. This means that we can use these constants with the precision our application requires.
  • Convenience: Prior to C++20, programmers often defined these constants themselves or relied on less standardized ways of accessing them. With std::numbers, these constants are readily available and standardized across different compilers and platforms.
  • Type safety and readability: Using std::numbers enhances code readability and reduces the likelihood of errors associated with manually defining and using mathematical constants.

Available constants

The <numbers> header includes a variety of constants. Here are a few notable examples:

  • std::numbers::pi: Represents the π constant, the ratio of the circumference of a circle to its diameter.
  • std::numbers::e: Represents Euler’s number, the base of natural logarithms.
  • std::numbers::phi: Represents the golden ratio, an irrational number that appears in various aspects of art, architecture, and nature.
  • std::numbers::sqrt2: Represents the square root of 2, the length of the diagonal of a square with unit side length.

Code example

Let’s look at code example demonstrating how to use std::numbers in a C++ program:

#include <iostream>
#include <numbers>
int main() {
std::cout << "Pi: " << std::numbers::pi << std::endl;
std::cout << "Euler's number: " << std::numbers::e << std::endl;
std::cout << "Golden ratio: " << std::numbers::phi << std::endl;
std::cout << "Square root of 2: " << std::numbers::sqrt2 << std::endl;
return 0;
}

Code explanation

  • Lines 1–2: We include two headers: <iostream> for handling input/output operations, allowing text to be printed to the console, and <numbers> for accessing pre-defined mathematical constants.

  • Line 4: We define a main function as the entry point of the program. It’s where the execution of the program begins.

  • Line 5: We utilize std::cout along with std::numbers::pi to print the value of ππ (pi) to the console. This line showcases the use of the ππ constant from the <numbers> header.

  • Line 6: Similar to the previous line, we print Euler’s number (ee) to the console using std::numbers::e. This demonstrates how to access and use Euler’s number from the <numbers> library.

  • Line 7: We print the value of the golden ratio (phiphi) using std::numbers::phi. This line highlights the availability of the golden ratio as a constant in the <numbers> header.

  • Line 8: We output the square root of 22 to the console, utilizing std::numbers::sqrt2. This is an example of accessing another mathematical constant provided by the <numbers> header.

Application

Whether we’re working on scientific simulations, graphics rendering, or any other domain where mathematical constants are essential, std::numbers is a valuable addition to our programming toolkit.

std::numbers simplifies the development of mathematically intensive applications. For C++ programmers, this means improved code readability, accuracy, and a more streamlined approach to mathematical programming. Whether we’re working on scientific simulations, graphics rendering, or any other domain where mathematical constants are essential, std::numbers is a valuable addition to our programming toolkit.

Ready to master C++?

Our Learn C++ course will help you build practical skills, from basic loops to complex program structures. Join now and start coding your way to success!

New on Educative
Learn to Code
Learn any Language as a beginner
Develop a human edge in an AI powered world and learn to code with AI from our beginner friendly catalog
🏆 Leaderboard
Daily Coding Challenge
Solve a new coding challenge every day and climb the leaderboard

Free Resources

Copyright ©2025 Educative, Inc. All rights reserved