Frage zu komplexen Gleitkommazahlen (C99-Standard)



  • Also hey,

    ich lese gerade mein Buch über C Grundkurs. Nun bin ich auf Seite 50 angekommen, wo die Komplexen Gleitkommatypen erklärt werden, wie z. B.
    float_Complex
    double_Complex und
    long double_Complex

    Desweiteren wurde hier creal() und cimag() erklärt. Ein Beispiel in dem Buch sollte das jetzt verdeutlichen, was ich allerdings nicht so sehe, denn ein paar Fragen bleiben offen. Hier erstmal das Beispiel

    int main(void) {
    (01)float f1 = 1.0;
    (02)float complex fc = 2.0 + 3.0*1;
    (03)// 4 Bytes
    (04)printf(*sizeo(float) : %d\n", sizeof(float));
    (05)// 8 Bytes (realer und imaginärer Teil)
    (06)printf("sizeof(float complex) : %d\n",
    (07)               sizeof(float complex));
    (08)//Ausgabe vom Real- und Imignärteil
    (09)printf("%f + %f\n", creal(fv), cimag(fc));
    (10)return 0;
    (11)}
    

    So, das ist das tolle Beispiel. Jetzt meine Fragen:
    1. Wofür steht, und woher kommt das f1 = 1.0; in Zeile (01)?
    2. Wofür steht und woher kommt das fc = 2.0 + 3.0*1; in Zeile (02)?
    3. Wofür steht und woher kommt das *sizeo, sizeof in Zeile (04)?
    4. Wofür steht und woher kommt das ("...+(Wieso ist hier ein +)?", (fv), (fc) in Zeile (09)?

    Das sind alles Abkürzungen, nur wofür steht das?, und woher kommen diese? Sinnlos wäre jetzt, wenn ich einfach mit dem nächsten kapitel weitermachen würde, ohne das ich das Thema "Fließkommazahlen" verstanden habe. Also würde es mir weiterhelfen, wenn Ihr mir bei der Beantwortung der Fragen helfen könntet 🙂



  • Windassel schrieb:

    So, das ist das tolle Beispiel. Jetzt meine Fragen:
    1. Wofür steht, und woher kommt das f1 = 1.0; in Zeile (01)?
    2. Wofür steht und woher kommt das fc = 2.0 + 3.0*1; in Zeile (02)?
    3. Wofür steht und woher kommt das *sizeo, sizeof in Zeile (04)?
    4. Wofür steht und woher kommt das ("...+(Wieso ist hier ein +)?", (fv), (fc) in Zeile (09)?

    Wenn ich mir die ersten drei Fragen so angucke, hast du wohl mehr nicht verstanden als Fließkommazahlen 🙄

    Ich gehen bei allem sinnlosen (*sizeo soll vermutlich "sizeof sein) einfach mal von Übertragungsfehlern aus.

    Mit
    int i = 5;
    hat i den Wert 5. Damit wären dann die ersten beiden Fragen beantwortet.
    sizeof() liefert die Größe des übergebenen Typs in Byte zurück.
    Das + steht einfach nur im String und macht gar nichts.



  • aber in meinem Buch wird net erklärt, was sizeof bedeutet, deswegen hab ich ma nachgefragt. Und wie kommt man darauf, dass man fc = 2.0 + 3.0*1 zuordnet? Können da nicht einfach auch andere Zahlen stehen? Und woher kommtn das f1 her??



  • Klar kann man da auch andere Werte hinschreiben - je nachdem welchen Wert man im Programm benötigt. Und f1 ist einfach nur der Name einer Variablen (die nach der Definition nicht weiter verwendet wird).



  • Vermutlich ist das falsch abgeschrieben, es sollte wohl 2.0 + 3.0*I heißen.



  • Also wenn ich das "Programm" jetzt richtig verstanden habe, handelt es sich um folgendes:

    In Zeile (01) bestimmen wir einen reellen Gleichkommatypen (float) mit dem Namen f1, der den Wert 1.0 hat, richtig?

    In Zeile (02) bestimmen wir einen Complexen Gleitkommatypen (float complex), der den namen fc hat, mit dem Wert 2.0 + 3.0*I

    Zeile (03) ist nur ein einfaches Kommentar

    In Zeile (05) wollen wir dann etwas mit dem Befehl printf ausgeben. Sizeof liefert dann die Größe des übertragenen Typs in Bytes zurück. Nur wieso steht dahinter (float)? %d ist eine Formatanweisung und gehört zu printf, und warum steht dann schon wieder sizeof(float)?

    Zeile (06) ist wieder ein Kommentar
    Zeile (07) soll uns wieder was ausgeben. Nur diesmaleinen komplexen Gleitkommatypen

    Ah okay, ich glaube bis hier hin habe ich das verstanden. Zeile (01 und 02) sind dazu da, um die Variablen zu bestimmen, und in den restlichen zeilen "rechnen" wir damit. Somit erhalten wir dann auf der Konsole ein Ergebnis, war das richtig?



  • Bashar schrieb:

    Vermutlich ist das falsch abgeschrieben, es sollte wohl 2.0 + 3.0*I heißen.

    ja das stimmt. das sollte wirklich I heißen, aber warum I?



  • Windassel schrieb:

    In Zeile (05) wollen wir dann etwas mit dem Befehl printf ausgeben. Sizeof liefert dann die Größe des übertragenen Typs in Bytes zurück. Nur wieso steht dahinter (float)? %d ist eine Formatanweisung und gehört zu printf, und warum steht dann schon wieder sizeof(float)?

    das erste "sizeof(float)", das du dort oben falsch abgeschrieben hast, ist einfach nur ein Text, den printf() 1:1 ausgibt, das zweite ist die Anwendung des sizeof-Operators - und der mußt natürlich wissen, wovon du die Größe benötigst.

    Windassel schrieb:

    Bashar schrieb:

    Vermutlich ist das falsch abgeschrieben, es sollte wohl 2.0 + 3.0*I heißen.

    ja das stimmt. das sollte wirklich I heißen, aber warum I?

    Ist wohl eine Konstante, die die imaginäre Einheit darstellt.



  • Okay, alles klar. Ich danke euch erstmal für Eure Hilfe. Bin jetzt schon wieder ein Stückchen schlauer geworden. Werde aber erstnochmal 2 Kapitel zurückspringen, und das nochmal lesen, damit ich mir das besser merken kann 😉



  • Und inZeile 4 ist der * auch ein *
    Und bestimmt heißt die Variable auch fl (FL) für float.


Anmelden zum Antworten