Ich mag #defines nicht, da sie einfache Textersetzungen ohne Typsicherheit sind. Sie können auch Probleme mit Ausdrücken verursachen, wenn Klammern weggelassen werden, z.B.
#define T_PI 2*PI
sollte wirklich sein
#define T_PI (2*PI)
Meine derzeitige Lösung für dieses Problem ist die Verwendung fest kodierter Werte für Konstanten, z. B. in my_constants.hxx
namespace Constants {
constexpr double PI = 3.141... ;
}
Ich kodiere die Werte jedoch nicht fest (da ich diesen Ansatz auch nicht mag), sondern ich verwende ein separates Fortran-Programm, um diese Datei zu schreiben. Ich verwende Fortran, weil es Vierfachpräzision vollständig unterstützt (C++ unter VisualStudio nicht) und trig-Funktionen das C++-Äquivalent zu constexpr sind. Z.B..
real(8), parameter :: pi = 4*atan(1.0d0)
Zweifellos lassen sich auch andere Sprachen für dieselbe Aufgabe verwenden.
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