M_PI..... Fehlerhaftes Programm
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?Wieso? IMO wären da Makros besser aufgehoben...
-
Hacker schrieb:
Wieso? IMO wären da Makros besser aufgehoben...
Was siehst du denn als Vorteil eines Makros?
-
Edit ^4:
Ne, lieber Funktionen und constexpr. Makros sind nicht schneller.
-
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
-
gfhfgh schrieb:
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
Stimmt, die sind ja auch nich typsicher, nicht?
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?Eine explizite Aussage dazu kann ichnicht zu finden. Allerdings scheint es zumindest erlaubt zu sein, beispielsweise ist in 26.8/9 nur von Signaturen die Rede und constexpr ist nicht Teil der Signatur (der Rückgabetyp allerdings auch nicht).
-
Hacker schrieb:
gfhfgh schrieb:
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
Stimmt, die sind ja auch nich typsicher, nicht?
Das ist fast schon das geringste Problem. Schau dich einfach mal bei Google um. Es gibt genug Beispiele, wo Makros Bugs erzeugen, die man nur schwer findet.
Fängt schon bei Kleinigkeiten wie z.B. MY_MACRO(++i); an.
-
Wie kann eine trigonometrische Funktion constexpr sein, wenn sie einen berechnetes Objekt zurückgibt?
-
Hacker schrieb:
Wie kann eine trigonometrische Funktion constexpr sein, wenn sie einen berechnetes Objekt zurückgibt?
Wenn die Funktion bei gleichem Argument immer das gleiche zurück gibt und auch sonst keine Seiteneffekte hat, ist das erlaubt. Das ist sogar eigentlich der ganze Witz an constexpr.
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
Vorsicht damit, da consts in C++ internal linkage haben verletzt du bspw. mit einer inline-Funktion
inline double circlearea(double r) { return PI * r * r; }
, die in mehreren Übersetzungseinheiten eingebunden wird, die ODR, da sich pi in beiden Definitionen auf eine andere Variable bezieht.
Funktioniert auf gängigen Compilern zwar, ist aber wenn man stur nach Standard geht nicht erlaubt.
-
@jokesterUnd was hat das mit der ODR zu tun?
@camper: Danke für die Info.
-
Die ODR besagt unter anderem, dass inline-Funktionen in jeder Übersetzungseinheit die gleiche Definition haben müssen.
-
noch was was nicht ganz hinneinpasst.. habe zwar angefangen.. kenne mich einn bissel mit funktionen und schleifen aus.. zeiger auch bekannt...
aber kannste mal etwas empfelen für anfänger die dann auch weitergeht nach der consolenanwendungen
aber ich glaube ich brauche auch was für consolen anwendungen da ich sicher nciht durch bin..
so.. da es einige problems gab.... das ganze auf deutsch:
Suche ein gutes Buch/ Tutoile(was aber ja nicht empfolenwird ... warscheinlich nciht die beste wahl)/...
habe bisjetzt mit Tutorial gelernt... aber man merkt das optimale ist es nicht...
und zwar hiermit:
http://www.youtube.com/user/00z3r000?feature=g-all-c
ist ganz gut erklärt
wenns noch weitere fragen gibt für meine verwurschtelte frage da ich nicht so richtig wusste wie ich mich ausdrücken kann
-
gfhfgh schrieb:
Hacker schrieb:
gfhfgh schrieb:
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
Stimmt, die sind ja auch nich typsicher, nicht?
Das ist fast schon das geringste Problem. Schau dich einfach mal bei Google um. Es gibt genug Beispiele, wo Makros Bugs erzeugen, die man nur schwer findet.
Fängt schon bei Kleinigkeiten wie z.B. MY_MACRO(++i); an.Naja, klar. Bei sowas hat aber ein Vollidiot programmiert (und wer den Fehler nicht sieht ist selbst einer):
#define add(x,y) x+y //... auto zahl(5 * add(4, 5));
Nein, das Ergebnis ist nicht 45.
-
Jesse schrieb:
so.. da es einige problems gab.... das ganze auf deutsch:
Bitte arbeite an deiner Rechtschreibung und Grammatik! Wenn deine Beiträge wie hingekotzt aussehen, dann bekommst du in der Regel auch dazu passende Antworten.
Suche ein gutes Buch/ Tutoile(was aber ja nicht empfolenwird ... warscheinlich nciht die beste wahl)/...
-
SeppJ schrieb:
Jesse schrieb:
so.. da es einige problems gab.... das ganze auf deutsch:
Bitte arbeite an deiner Rechtschreibung und Grammatik! Wenn deine Beiträge wie hingekotzt aussehen, dann bekommst du in der Regel auch dazu passende Antworten.
Suche ein gutes Buch/ Tutoile(was aber ja nicht empfolenwird ... warscheinlich nciht die beste wahl)/...
-