Forum: Mikrocontroller und Digitale Elektronik #include <complex.h> in C


von DK (Gast)


Lesenswert?

Moin,
für mein Programm bräuchte ich das complex.h. AVR-Studio sagt aber: 
"...error: complex.h: No such file or directory". In den Foren habe ich 
gelesen, dass complex.h nur mit CPP geht. Gibt es für C eine 
Alternative?
Danke :-)

von Peter (Gast)


Lesenswert?

double gibt es doch eh nicht auf dem AVR, erzähl estmal was du vor hast, 
eventuell ist das eh schon der falsche Weg.

von Peter D. (peda)


Lesenswert?

Peter schrieb:
> double gibt es doch eh nicht auf dem AVR

Der AVR kann nix dafür.
Es ist der AVR-GCC, der es nicht kann.
Z.B. Bascom-AVR kann es.


Peter

von DK (Gast)


Lesenswert?

Ich habe zwei arrays I_comp und Q_comp, die ich nun zusammen sätzen will 
um einen komplexen Wert zu bekommen. Das wollte ich so machen:
1
int i;
2
for(i=0;(sizeof(I_comp))>0;i++)
3
{
4
Rx_complex=I_comp[i]+I*Q_comp[i];
5
}

Dann möchte ich für Rx_coplex die Phase berechnen...

von Jean Player (Gast)


Lesenswert?

Hi,
probier mal die tgmath.h

Gruß

von Karl H. (kbuchegg)


Lesenswert?

DK schrieb:
> Ich habe zwei arrays I_comp und Q_comp, die ich nun zusammen sätzen will
> um einen komplexen Wert zu bekommen. Das wollte ich so machen:
>
>
1
> int i;
2
> for(i=0;(sizeof(I_comp))>0;i++)
3
> {
4
> Rx_complex=I_comp[i]+I*Q_comp[i];
5
> }
6
>

In C++ würde das so gehen. In C geht das so sicher nicht.

>
> Dann möchte ich für Rx_coplex die Phase berechnen...

Und wozu brauchst du da jetzt genau den Datentyp complex?

Die Phase berechnen, das ist eine Formel, die du genausogut auch selber 
hinschreiben kannst. Dazu brauchst du doch keinen vordefinierten 
Datentyp complex.

(Man kann sich natürlich auch selber einen bauen mitsamt den zugehörigen 
Supportfunktionen. Ist ja schliesslich auch nur eine Struktur mit 2 
Member.
Wenn man unbedingt will und es im Programm noch meherer komplexe 
Berechnungen gibt)

von DK (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Die Phase berechnen, das ist eine Formel, die du genausogut auch selber
> hinschreiben kannst.

dafür nicht, ich wollte aber trotzdem wissen, ob man es benutzen kann, 
falls es nötig wird.

von Klaus W. (mfgkw)


Lesenswert?

In Standard-C gibt es tatsächlich kein complex.h.

In C++ gibt es eines, das heißt dann aber nicht complex.h,
sondern nur complex.
Mit dem avr-gcc kann man nun zwar C++ (rein sprachseitig)
kompilieren, allerdings ist der Umfang der Bibliothek
weit vom Standard entfernt.
complex ist dann m.W. auch nicht dabei. Allerdings könnte
man das mit vertretbarem Aufwand in C++ nachrüsten.
Der Vorteil der C++-Version der komplexen Zahlen wäre,
daß dort complex nur ein template ist, dessen Grundtyp
für den Imaginär- und Realteil als Parameter frei
gewählt werden kann. D.h. man kann complex<float>
nehmen oder sogar complex<meintollerfestkommatyp>.

von DK (Gast)


Lesenswert?

Jean Player schrieb:
> probier mal die tgmath.h

Unter tgmath.h ist complex.h auch angebunden, kommt also der gleiche 
Fehler raus.

von Karl H. (kbuchegg)


Lesenswert?

DK schrieb:
> Karl heinz Buchegger schrieb:
>> Die Phase berechnen, das ist eine Formel, die du genausogut auch selber
>> hinschreiben kannst.
>
> dafür nicht,

Warum nicht?
Auch das C++ complex kann ja nicht zaubern, sondern muss das berechnen.


(Das ist simple Trigonometrie im rechtwinkeligen Dreieck. Wenn du nur 
ein bischen Ahnung von komplexen Zahlen hast, wüsstest du das)

von DK (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Warum nicht?
> Auch das C++ complex kann ja nicht zaubern, sondern muss das berechnen.

:-) ich meinte, dass ich das complex.h für die Phasenberechnung sicher 
nicht brauche. Ich weis schon was komplexe Rechnung heißt.

von Karl H. (kbuchegg)


Lesenswert?

DK schrieb:
> Karl heinz Buchegger schrieb:
>> Warum nicht?
>> Auch das C++ complex kann ja nicht zaubern, sondern muss das berechnen.
>
> :-) ich meinte, dass ich das complex.h für die Phasenberechnung sicher
> nicht brauche. Ich weis schon was komplexe Rechnung heißt.

OK. Tschuldigung. War dann Misverständnis meinerseits.
(Ich bin schon paranoid - wenn es um vermeintlich einfache Fragen geht)

In C wirst du dir dann komplexe Zahlen selber machen müssen (oder im Web 
was suchen).

von DK (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> OK. Tschuldigung. War dann Misverständnis meinerseits.
>
> In C wirst du dir dann komplexe Zahlen selber machen müssen (oder im Web
> was suchen).

Kein Problem, danke sehr!

von Detlev T. (detlevt)


Lesenswert?

Man kann in C komplexe Zahlen z.B. als struct zweier floats definieren. 
Was aber keinesfalls geht, ist die Verwendung der "normalen" Operatoren 
wie +,-,*,/ . Dies wird bei C++ durch das Überladen dieser Operatoren 
erreicht, also einem Mechanismus, der in C nicht existiert.

Eine C-Funktion kann aber auch einen struct als Ergebnis zurückgeben. 
(Nutze ich selbst aber nie). Damit könnte man mit eine Art "polnischer 
Notation" sich durchaus Ausdrücke bauen.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

complex.h ist Teil des C99-Standards, siehe:
http://www.jshansen.dk/Notes/complex.html

GCC unterstuetzt prinzipiell C99, die AVR-LIBC aber anscheinend nicht 
vollstaendig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.