Führt C ++ 11, 14, 17 oder 20 eine Standardkonstante für Pi ein?
Es ist ein ziemlich dummes problem mit der Zahl pi in C und C++. Soweit ich weiß M_PI
definiert in math.h
ist nicht erforderlich, von jedem standard.
Neuen C++ - standards eingeführt, die eine viel komplizierte Mathematik in der standard-Bibliothek - hyperbolische Funktionen, std::hermite
und std::cyl_bessel_i
verschiedene Zufallszahlen-Generatoren und so weiter und so Fort.
Hat einer von den "neuen" Normen bringen eine Konstante für pi? Wenn nicht - warum? Wie passt das alles zu diesem komplizierten Mathe-Arbeit ohne Sie?
Ich bin mir bewusst, ähnliche Fragen über pi in C++ (Sie sind mehrere Jahre und standards alt); ich würde gerne wissen, den aktuellen Stand des Problems.
Ich bin auch sehr interessiert in warum, oh warum C++ immer noch nicht über eine Konstante pi hat aber eine viel kompliziertere math.
UPD: ich weiß, dass ich definieren kann, pi mich als 4*atan(1) oder acos(1) oder double pi = 3.14. Sicher. Aber warum im Jahr 2018 habe ich noch, es zu tun? Wie standard-math-Funktionen arbeiten, ohne pi?
InformationsquelleAutor der Frage Amomum | 2018-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, pi ist immer noch nicht eine Konstante eingeführt in die Sprache, und es ist ein Schmerz im Nacken.
Ich bin glücklich, dass ich im Boost - (www.boost.org) und Sie definieren pi mit einer ausreichend großen Anzahl von Nachkommastellen, für die auch ein 128-bit -
long double
.Wenn Sie nicht verwenden, Steigern Sie dann fest es selbst. Definieren Sie mit einer trigonometrischen Funktion ist verlockend, aber wenn Sie das tun, können Sie nicht tun, dann machen es zu einem
constexpr
. Die Genauigkeit der trigonometrischen Funktionen ist auch nicht garantiert mit jedem standard den ich kenne (cf. std::sqrt), so dass auch wirklich Sie sich auf gefährlichem Boden in der Tat unter Berufung auf eine solche Funktion.Es ist ein Weg, um eine
constexpr
Wert für pi Verwendung metaprogramming: siehe http://timmurphy.org/2013/06/27/template-metaprogramming-in-c/InformationsquelleAutor der Antwort Bathsheba
Nein, keiner der standards stellt die Konstante, die für das Zahl pi (π). Sie können die Ungefähre Anzahl der in Ihrem code:
Anderen Sprachen wie C# haben die Konstante deklariert, die in Ihren Bibliotheken. C++ nicht.
InformationsquelleAutor der Antwort Ron
Wie andere gesagt haben, es gibt keine
std::pi
aber wenn Sie wollen, präzisePI
Wert, den Sie verwenden können:Dies setzt Voraus, dass Ihre C++ - Implementierung erzeugt eine korrekt gerundete Wert von PI aus
acos(-1.0)
das ist üblich, aber nicht garantiert.Es ist nicht
constexpr
aber in der Praxis Optimierung von Compilern wie gcc und clang bewerten es zur compile-Zeit. Er erklärt esconst
ist wichtig für die Optimierung zu tun, einen guten job, aber.InformationsquelleAutor der Antwort Gox
M_PI
ist definiert durch "standard", wenn nicht ein Sprache standard: POSIX mit dem X/Open System Schnittstellen Erweiterung (das ist sehr allgemein unterstützte und für offizielle UNIX-branding).Es ist ein bisschen früh, um Fragen zu stellen über das, was "in C++20", aber da du es getan hast: es vielleicht noch haben solche Konstanten. Bibliothek der Evolution betrachtet, dass das Papier im März, aber das design (Ausgleich der offensichtlich wünschenswert, eine template-basierte Allgemeinheit mit ease-of-use in häufigen Fällen) nicht abgeschlossen noch.
InformationsquelleAutor der Antwort Davis Herring
Es ist offensichtlich nicht eine gute Idee, denn es gibt keine offensichtliche Art, mit der define pi, ist universell einsetzbar auf verschiedenen domains.
Pi ist, natürlich, eine irrationale Zahl, so kann es nicht richtig vertreten durch alle C++ - Typ. Man könnte argumentieren, dass der Natürliche Ansatz ist daher, Sie zu definieren, in den größten floating-point-Typ zur Verfügung. Jedoch, die Größe des größten standard floating-point-Typ
long double
ist nicht definiert durch den C++ - standard, so dass der Wert der Konstante würde zwischen den Systemen variieren. Schlimmer noch, für jedes Programm in dem die arbeiten geben, nicht diese größte Art, der definition von pi wäre unangebracht, da es verlangen würde, eine Leistungs-Kosten auf jedem Gebrauch von pi.Ist es auch trivial für jeden Programmierer zu finden, der Wert von pi und definieren Ihre eigenen Konstanten, geeignet für die Verwendung, so dass es bietet keine großen Vorteil in der Mathematik-Header.
InformationsquelleAutor der Antwort Jack Aidley
Bearbeitet Zu entfernen der Begriff notwendig ist, weil es umstritten. Es ist zu viel von einem absoluten Begriff.
C++ ist eine große und komplexe Sprache, für, dass Grund der Standards Committee beinhalten nur Dinge, die dringend erforderlich. Soweit möglich, Links zu nicht-Sprache-standard-Bibliotheken... wie Boost.
boost::math::Konstanten
InformationsquelleAutor der Antwort Tiger4Hire