C Programm seltsames Verhalten

Gast #3587125
Lesenswert?

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;

}
Gast #3587155
Lesenswert?

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.
Gast #3587590
Lesenswert?

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
#3587604
Lesenswert?

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.
Gast #3587617
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren