mikrocontroller.net

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


Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
int i;
for(i=0;(sizeof(I_comp))>0;i++)
{
Rx_complex=I_comp[i]+I*Q_comp[i];
}

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

Autor: Jean Player (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
probier mal die tgmath.h

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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:
>
>
> int i;
> for(i=0;(sizeof(I_comp))>0;i++)
> {
> Rx_complex=I_comp[i]+I*Q_comp[i];
> }
> 

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)

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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>.

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jean Player schrieb:
> probier mal die tgmath.h

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.