643 Stimmen

Verwendung der PI-Konstante in C++

Ich möchte die PI-Konstante und trigonometrische Funktionen in einem C++-Programm verwenden. Ich erhalte die trigonometrischen Funktionen mit include <math.h> . Allerdings scheint es in dieser Header-Datei keine Definition für PI zu geben.

Wie kann ich PI bekommen, ohne es manuell zu definieren?

3 Stimmen

@tiwo, wollen Sie wissen, was der Unterschied ist zwischen 3.14 , 3.141592 et atan(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.

2voto

Fazlı KUZU Punkte 29

Das können Sie verwenden:

#define _USE_MATH_DEFINES // for C++
#include <cmath>

#define _USE_MATH_DEFINES // for C
#include <math.h>

Mathematische Konstanten sind in Standard C/C++ nicht definiert. Um sie zu verwenden, müssen Sie zuerst definieren _USE_MATH_DEFINES und enthalten dann cmath o math.h .

2voto

Donald Duck Punkte 7498

Sie können dies tun:

#include <cmath>
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif

Si M_PI ist bereits definiert in cmath wird dies nichts anderes bewirken als die Aufnahme von cmath . Wenn M_PI nicht definiert ist (was zum Beispiel in Visual Studio der Fall ist), wird es definiert. In beiden Fällen können Sie M_PI um den Wert von pi zu erhalten.

Dieser Wert von pi stammt aus der qmath.h von Qt Creator.

2voto

Papa Smurf Punkte 345

Unter Windows (cygwin + g++) habe ich festgestellt, dass es notwendig ist, das Flag -D_XOPEN_SOURCE=500 für den Präprozessor zur Verarbeitung der Definition von M_PI en math.h .

2 Stimmen

Dies ist keine Antwort, sondern ein Kommentar zur Antwort von fritzone.

2 Stimmen

@0xbadf00d: Es handelt sich um eine völlig eigenständige Antwort, die die erforderlichen Schritte enthält, um M_PI die auf einer bestimmten Plattform arbeiten. Das ist kein Kommentar zu einer Antwort für eine andere Plattform, genauso wenig wie eine Antwort für eine andere Plattform ein Kommentar zu dieser ist.

1voto

Willy Goat Punkte 1097

Mit C++14 können Sie static constexpr auto pi = acos(-1);

10 Stimmen

std::acos ist kein constexpr . Ihr Code lässt sich also nicht kompilieren.

0 Stimmen

@0xbadf00d Ich habe es mit g++ kompiliert

13 Stimmen

@WillyGoat: Dann ist g++ falsch, denn acos ist nicht constexpr in C++14, und es wird nicht vorgeschlagen, dass es constexpr sogar in C++17

-3voto

Carl Knox Punkte 9

15 Dezimalstellen brachten den Menschen auf die Mondoberfläche und zurück. Alles, was darüber hinausgeht, hat astronomische Ausmaße. Wären Sie in der Lage, dies in einem kleineren Maßstab praktisch zu messen? Andere haben Monate damit verbracht, auf Billionen von Stellen zu rechnen. Das ist nicht sinnvoll, außer um in die Rekordbücher zu kommen.

Sie wissen, dass Sie Pi auf eine beliebige Länge berechnen können, aber die Beibehaltung ist praktisch.

3 Stimmen

Damit ist die Frage noch nicht beantwortet. Sobald Sie über genügend Ruf werden Sie in der Lage sein Kommentar zu einem beliebigen Beitrag ; stattdessen, Antworten geben, die keine Klärung durch den Fragesteller erfordern . - Aus der Rezension

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X