komplexe Zahlen
-
Hallo!
Ich will in "reinem" C (warum ich im C++Forum poste, verrate ich noch) eine Fraktalberechnung der Julia-Menge inklusive grafischer Darstellung programmiern. Da ich dafür komplexe Zahlen benötige, habe ich mir einen eigenen Datentyp geschrieben:typedef struct { float flReal; float flImag; } complex_t;
Also dasselbe wie _complex aus math.h/cmath, nur mit einer sinnvollen Variablenbenennung. (Da ich mal wieder was in C schreiben weill, fällt std::complex<float> ja weg)
Die Struktur für Rechen- und Zeicheninformationen sieht wie folgt aus:typedef struct { complex_t z; complex_t c; // std::complex<float> z; // std::complex<float> c; unsigned char *pData; } julia_t;
Das Problem: Meine komplexen Zahlen funktionierem aus irgendeinem Grund nicht so, wie sie sollten, deshalb habe ich Testhalber in julia_t auch sämtliche 'complex_t' mit std::complex<float> ersetzt und die Berechnungen ggf. mit Operatoren ausgetauscht - siehe da, es funktioniert. Warum aber will der von mir geschriebene Typ complex_t nicht funktionieren?
Hier der entscheidende Teil, bei dem mit komplexer Arithmetik gearbeitet wird:// mit std::complex<float> - funktioniert: j.z *= j.z; j.z += j.c; // mit complex_t - funktioniert nicht: j.z.flReal *= j.z.flReal; j.z.flImag *= j.z.flImag; j.z.flReal += j.c.flReal;
Eigentlich ist der mit complex_t geschriebene Code ja nur der Code von operator*= und operator+= von std::complex, aber trotzdem funktioniert es nicht. Warum?
Danke im Voraus, aVoX.
-
#include <complex.h>
Ansonsten: c^2 = (a + bi)^2 = a^2 - b^2 + 2abi
trotzdem funktioniert es nicht.
Das ist keine Fehlerbeschreibung. Hast du denn mal die Werte bei einer einfachen Multiplikation verglichen, also bei z = c^2 + a konkrete Werte eingesetzt?
Eigentlich ist der mit complex_t geschriebene Code ja nur der Code von operator*= und operator+= von std::complex
Woher nimmst du diese Gewissheit? Hast du in der STL nachgesehen?
-
aVoX schrieb:
// mit std::complex<float> - funktioniert: j.z *= j.z; // mit complex_t - funktioniert nicht: j.z.flReal *= j.z.flReal; j.z.flImag *= j.z.flImag;
Das Produkt komplexer Zahlen entsteht nicht durch separate Multiplikation von Real- und Imaginärteil.
Tipp:
a * b == (a.real + i*a.imag) * (b.real + i*b.imag)
knivil schrieb:
#include <complex.h>
Nein, der Header heisst
<complex>
. C++-Standardheader haben nie eine Dateiendung.
-
Nexus schrieb:
Tipp:
a * b == (a.real + i*a.imag) * (b.real + i*b.imag)
*Facepalm* Meine Mathematikkenntnisse grenzen wirklich schon fast an moderne Kunst. Danke
-
Nexus schrieb:
Nein, der Header heisst <complex>. C++-Standardheader haben nie eine Dateiendung.
Mann, Mann, Mann, Frau ... Generation Pisa? Der erste SATZ:
Ich will in "reinem" C (warum ich im C++Forum poste, verrate ich noch)
-
aVoX schrieb:
Ich will in "reinem" C (warum ich im C++Forum poste, verrate ich noch)
Wann verrätst du uns das? Hoffentlich bald, sonst seh ich keinen Grund, das nicht ins C-Forum zu verschieben