C++20 std::numbers::pi
Endlich ist es soweit: http://eel.is/c++Entwurf/Nummern
main.cpp
#include <numbers> // std::numbers
#include <iomanip>
#include <iostream>
int main() {
std::cout << std::fixed << std::setprecision(20);
std::cout << "float " << std::numbers::pi_v<float> << std::endl;
std::cout << "double " << std::numbers::pi << std::endl;
std::cout << "long double " << std::numbers::pi_v<long double> << std::endl;
std::cout << "exact " << "3.141592653589793238462643383279502884197169399375105820974944" << std::endl;
}
wobei das genaue Ergebnis mit berechnet wurde:
echo "scale=60; 4*a(1)" | BC_LINE_LENGTH=0 bc -l
gemäß: Wie kann ich pi mit dem Bash-Befehl berechnen?
Kompilieren und ausführen:
g++-10 -ggdb3 -O0 -std=c++20 -Wall -Wextra -pedantic -o main.out main.cpp
./main.out
Sortie :
float 3.14159274101257324219
double 3.14159265358979311600
long double 3.14159265358979323851
exact 3.141592653589793238462643383279502884197169399375105820974944
Getestet auf Ubuntu 20.04 amd64, GCC 10.2.0
Der angenommene Vorschlag beschreibt:
5.0. "Kopfzeilen" [headers] In der Tabelle [tab:cpp.library.headers] wurde eine neue <math>
Kopfzeile hinzugefügt werden muss.
[...]
namespace std {
namespace math {
template<typename T > inline constexpr T pi_v = unspecified;
inline constexpr double pi = pi_v<double>;
Außerdem gibt es eine std::numbers::e
natürlich :-) Wie berechnet man die Eulersche Konstante oder die Eulersche Kraft in C++?
Diese Konstanten verwenden die C++14-Variablenvorlagenfunktion: C++14 Variable Templates: was ist ihr Zweck? Irgendein Anwendungsbeispiel?
In früheren Fassungen des Entwurfs war die Konstante unter std::math::pi
: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r7.pdf
3 Stimmen
@tiwo, wollen Sie wissen, was der Unterschied ist zwischen
3.14
,3.141592
etatan(1) * 4
?46 Stimmen
Nebenbei bemerkt: cmath sollte in C++ anstelle von math.h verwendet werden, die für C bestimmt ist.
5 Stimmen
In loser Verbindung: siehe cise.ufl.edu/~manuel/obfuscate/pi.c wie man den Wert von PI direkt aus der Definition berechnet.
16 Stimmen
Es ist in C++20 angekommen! stackoverflow.com/a/57285400/895245