Hallo, Ich muss wissen, was genau der unterschied ist , wenn ich eine double in eine float umwandle oder es nicht mache. werden dann bei der double einfach stellen gestrichen oder wird gerundet ? wo ist der unterschied beim weitergegebenen wert?
Das hängt vom Compiler ab ... für gccavr beispielsweise ist float == double, was, wie wir kürzlich in einer Diskussion hier herausgefunden haben, sogar ANSI-C (nach K&R, 2. Auflage) - konform ist. Da keines der Formate intern mit einer Dezimaldarstellung arbeitet (sondern mit binärer Mantisse & Exponent), sieht die Konvertierung höchstwahrscheinlich so aus, daß die am wenigsten signifikanten Bits der Mantisse gestrichen werden. Ich befürchte, daß das Verhalten obendrein auch noch implementierungsspezifisch sein wird; wenn ich mich irre, wird mir sicherlich wer widersprechen.
Der Unterschied ist, dass float aus 4Byte besteht und double aus 8Byte. float reicht glaube ich bis 8 nachkommerstellen und double bis 8. bin mir aber nich ganz sicher.
> Der Unterschied ist, dass float aus 4Byte besteht und double > aus 8Byte. Wenn du Rufus' Post gelesen hättest, wüsstest du, dass eben das gerade nicht der Fall ist. Auf deiner Architektur bei deinem Compiler mag das stimmen, avrgcc z.B. hat aber andere Größen. @Rufus: > was, wie wir kürzlich in einer Diskussion hier herausgefunden > haben, sogar ANSI-C-[...]-konform ist. Du beziehst dich vermutlich auf: http://www.mikrocontroller.net/forum/read-2-12872.html#189351 Dort wurde aber geschrieben, dass ein 4-Byte-double nicht ANSI-C-konform ist (evtl. aber C++-konform).
@Chris: Wir haben beide recht. float == double kann zulässig sein, hängt aber von der Genauigkeit ab: "noch alles offen, an anderer Stelle wird es jedoch deutlicher, weil als Mindestanforderung an die Genauigkeit gilt: FLT_DIG 6 DBL_DIG 10 LDBL_DIG 10 Und das ist mit 32bit double nicht zu schaffen. Zwar darf also float = double = long double gelten, aber eben nur, wenn dabei mindestens 10 Dezimalstellen herauskommen." (Post von A.K. 14:14 im von Dir zitierten Thread, auf den ich mich in der Tat bezog). Damit ist allerdings noch nicht geklärt, ob float a; double b; a = b; ein anderes Resultat liefert als a = (float) b; Was dazu der ANSI-C-Standard aussagt und wie das jeweils implementiert wird, entzieht sich leider gänzlich meiner Kenntnis.
@Rufus: Autsch, stimmt. Sorry. Ich hab dein Post irgendwie anders gelesen, dachte du hättest float = double = 4 Bytes geschrieben.
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.