Case-Funktion , C-programmierung

Gast #201368
Lesenswert?

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

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

@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.

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