komplexe Zahl addieren in C++
-
Weiß jemand ob es in C++ die imaginäre Einheit i mit i^2=-1 gibt ?
Wie addiere ich in C++ eine komplexe Zahl ?
Gibt es eine Möglichkeit, dass eine Funktion zwei Rückgabewerte hat, wie z.B. Real- und Imaginärteil ?
-
#include <iostream> #include <complex> using namespace std; // ... complex<double> z(-1, 0); cout << "Imaginäre Einheit: sqrt(" << z << ") = " << sqrt(z) << endl;
-
Danke für den Tip !
Nur leider liefert dein Programm als i 6.12303e-17,1; Ist das richtig ?
-
wenn du precision auf ziemlich hoch gesetzt hast, ja. Bei mir kommt (0,1) raus. BTW was ich noch vergessen hatte, die complex<T> Klasse hat alle möglichen Operatoren und Funktionen überladen, du kannst sie also normal addieren, multiplizieren, logarithmieren etc.
Wenn du standardesisch lesen kannst:
http://www.csci.csusb.edu/dick/c++std/cd2/lib-numerics.html#lib.complex.numbers
-
Wie sieht das mit i^2 aus? Hier bekomme ich z.B. einen Compilerfehler.
-
^ ist der bitweise exklusiv-oder-Operator, kein Potenzoperator.
-
Und wie sieht der Potenzoperator dann in C++ aus?
-
Verwende pow( zahl, exponent ). Funktioniert auch mit complex.
-
MFK schrieb:
Verwende pow( zahl, exponent ). Funktioniert auch mit complex.
Korrektur: Funktoniert nur mit <complex>.
edit: Ich musst mich noch grad an <math.h> erinnern.
Ansonsten Danke.
-
endline schrieb:
Wie sieht das mit i^2 aus? Hier bekomme ich z.B. einen Compilerfehler.
Die Funktion complex<double> square (complex<double> c) hab ich mir selbst implementiert.
complex<double> square (complex<double> c) {return (c.real()*c.real()-c.imag()*c.imag(),2*c.real()*c.imag());}
-
warum so umständlich gib doch einfach c*c zurück
-
jo, klappt sogar generisch mit allen Typen:
template <typename T> T square(T t) { return t*t; }
-
Bashar schrieb:
jo, klappt sogar generisch mit allen Typen:
template <typename T> T square(T t) { return t*t; }
Muss ich dafür was besonderes inkludieren ? Bei mir kommt: Templates must be classes or functions.
-
Eigentlich nicht. Das ist doch ne Funktion ... was hast du für nen Compiler?
-
Bashar schrieb:
Eigentlich nicht. Das ist doch ne Funktion ... was hast du für nen Compiler?
Borland. Mehr weiß ich nicht.
Wie weise ich einer complex<double> einen Wert zu ohne das bei der Initialisierung zu machen. Also:
complex<double> c; c=?;
Wie weise ich c ein Wertepaar zu ?
-
c = complex<double>(-2, 5.889);
-
Clyde schrieb:
Borland. Mehr weiß ich nicht.
Versuch mal, ob eine Ersetzung von typename durch class hilft.
template <class T> T square(T t) { return t*t; }
EDIT: Zu früh abgeschickt