Hi Ich fange mit der C programmierung an und habe ein seltsames Phänomen: Wenn ich dieses Programm ausführe bekomme ich einen Wert von 123.449997 und 1234.567000 Ist das normal? Code: #include <stdio.h> #include <stdlib.h> int main() { float d; double e; d=123.45; e=1234.567; printf("Variable d= %f\n",d); printf("Variable e= %lf\n",e); return 0; }
Anders herum: welche der beiden Ausgaben kommt Dir komisch vor und was haettest Du stattdessen erwartet?
Buchstaben Verwechsler schrieb: > Eine Begründung wäre nicht schlecht... war doch nicht Gegenstand der Frage.
Die 123.449997 finde ich komisch das ist 0,000003 zu wenig. Wieso ist das so?
Aaron schrieb: > Ist das normal? Jop. Versuch doch mal die Zahle binär darzustellen, dann wirst du von alleine feststellen, warum du nicht die erwarteten werte bekommst. (Stichworte: Rechnerinterne darstellung, Binäres Zahlensystem, und ähnliches) Grüße
Aaron schrieb: > Die 123.449997 finde ich komisch das ist 0,000003 zu wenig. Wieso ist > das so? Versuch mal, den Wert 0,1 als binäre Fliesskommazahl darzustellen. Also als Summe negativer Zweierpotenzen (sowas wie 1/16 + 1/32 + ...).
Aaron schrieb: > Wieso ist > das so? Du vergisst bei deiner Programmierung eins: Es gibt da Dinge, die sich Hardware nennen, in diesem Falle vornehmlich der Prozessor. Und der kann intern nur mit 0 und 1 rechnen. Ergo müssen deine Zahlen in binär gewandelt werden. Und Binäreszahlensystem und Komma-Zahlen sind ein ganz schlechtes paar.
Kaj schrieb: > Und Binäreszahlensystem und Komma-Zahlen sind ein ganz schlechtes paar. Keineswegs. Nur mit dezimalen Kommazahlen paart sich das schlecht.
> Keineswegs. Nur mit dezimalen Kommazahlen paart sich das schlecht.
Siehe Anhang!
:)
Aaron schrieb: > printf("Variable d= %f\n",d); Mehr Dezimalstellen auszugeben als im Format darstellbar sind führt zu solchen Effekten. Versuch mal: printf("Variable d= %.6e\n",d);
@Kaj Das stimmt so nicht ganz. Man könnte auch im 10er System rechnen (BCD) ist halt verschwenderisch.
A. K. schrieb: > Keineswegs. Nur mit dezimalen Kommazahlen paart sich das schlecht. Leute, Leute schrieb: > Siehe Anhang! > > :) heinz schrieb: > @Kaj > Das stimmt so nicht ganz Ist ja gut, habt ja recht. :) Ich versuche es nochmal: Aufgrund der begrenzten Genauigkeit (welche aus dem Binaerenzahlensystem resultiert) bei der rechnerinternen Darstellung, koennen Kommazahlen problematisch werden, wenn es um die genaue Darstellung geht. Jetzt ist aber genug. :P Gruesse
Kaj schrieb: > Ich versuche es nochmal: Aufgrund der begrenzten Genauigkeit (welche aus > dem Binaerenzahlensystem resultiert) Auch ein dezimales Format hat eine begrenzte Genauigkeit, und die ist bei gleicher Anzahl Bits zudem schlechter als in binärem Format. Es ist einfach so, dass sich Dezimalzahlen oft nicht exakt im Binärformat darstellen lassen.
Es gibt periodische Zahlen, wie z.B. 1/3. Diese kann man direkt nicht darstellen, da sie unendlich viele Nachkommastellen haben. Welche Zahlen periodisch sind, hängt aber vom Zahlensystem ab. Im 3er-System wäre 1/3 z.B. schlicht 0,1. Computer rechnen nun (abgehsehen vom genannten BCD-Format) im 2er-System, wodurch eben manche Komma-Zahlen, die im Zehner-System einfach aussehen, in einem Computer gar nicht darstellbar, da periodisch sind. 0,1 im 10er-System ergibt im 2er-System eine periodische Zahl (0,000110011001100110011001100110011...). Da aber Computer nicht unendlich Speicher und Rechenkapazität haben, muß die Zahl irgendwo abgeschnitten werden, und es ergibt sich zwangsläufig eine Abweichung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.