Lektion 8:

Ganze Zahlen und Fließkommazahlen in einem Ausdruck

Bisher haben wir nur den Typ float verwendet. Das bedeutet Fließkommazahl. Oft brauchen wir aber nur ganze Zahlen. Das Rechnen mit ganzen Zahlen ist oft viel schneller, als das Rechnen mit Fließkommazahlen.

 Der Typ für ganze Zahlen heißt int. Das Ergebnis einer Rechnung mit ganzen Zahlen ist wieder eine ganze Zahl. Das ist bei Addition, Subtraktion und Multiplikation auch ganz klar. Aber auch bei der Division ist es sinnvoll. Wir sagen z.B. 25 geteilt durch 7 ist gleich 3 Rest 4 und den Rest lassen wir unter den Tisch fallen.

  So ist es auch in C++. Der Ausdruck 25/7 ergibt den Wert 3, weil 25 und 7 ganze Zahlen sind. Wenn man herausfinden möchte, wie groß der Rest ist, könnte man 25-((25/7)*7) schreiben, aber dafür gibt es ein eigenes Rechenzeichen, den Modulo-Operator (%). Also 25%7 ist gleich 4.

Aber zurück zum Rechenfehler. Kommazahlen wäre das nicht passiert. Der Ausdruck 25.0/7.0 ergibt den Wert 3.5714... .

Ein einfaches Anfügen von ".0" macht aus ganzen Zahlen Fließkommazahlen. Wenn in einem Ausdruck sowohl ganze Zahlen, als auch Kommazahlen vorkommen, dann sorgt der Compiler dafür, daß zu jeder einzelnen Rechnung auf beiden Seiten des Rechenzeichens der gleiche Typ vorliegt. Dazu wird gegebenenfalls eine ganze Zahl in eine Fließkommazahl konvertiert (=umgewandelt). Der Compiler geht also wie folgt vor:

1 und 3 sind beides int, also 1/3=0 und ich merke mir 0. Für 0*grundflaeche wird zuerst die 0 (int) nach 0.0 (float) konvertiert und dann 0.0*grundflaeche gerechnet. Das Ergebnis ist 0.0. Und 0.0*hoehe ergibt wieder 0.0. Das Ergebnis ist 0.0!

Hätte man den Ausdruck hingegen so

   float volumen=(grundflaeche*hoehe)*1/3;

hingeschrieben, dann würde es gehen:

grundflaeche*hoehe sind beides float, also berechne ich das. Um diesen Wert mal 1 zu rechnen wird die 1 (int) nach 1.0 (float) konvertiert. So geschieht es dann auch mit der 3. Das Ergebnis ist richtig.



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00