Forum: Mikrocontroller und Digitale Elektronik double in float casten


von brechpunkt (Gast)


Lesenswert?

Hallo,

ich bekomme Gleitkommawerte als ASCII-Zeichen übergeben und soll sie in 
float-Variablen ablegen. Hierfür die Funktion strtof() zu verwenden 
scheidet in meinem Fall aus.

Aufgrund hoher Wertebereiche meinte mein Chef ich soll mir die Werte 
(z.B. durch atof() ) als double-Werte liefern lassen.

Mir ist klar, dass ein einfaches
Float_wert = (float) double_wert
dies tun würde. Was ich nur nicht verstehe ist, dass doch bei einem 
double-Wert überhaupt keine Nachkommastellen vorhanden sind. Wie soll 
ich denn da jemals den richtigen Wert erhalten?

von (prx) A. K. (prx)


Lesenswert?

brechpunkt schrieb:

> dies tun würde. Was ich nur nicht verstehe ist, dass doch bei einem
> double-Wert überhaupt keine Nachkommastellen vorhanden sind.

Du verwechselst offenbar "double" (double precision floating point) mit 
etwas anderem.

von Gelbe Wanderameise (Gast)


Lesenswert?

Übe Dich in Festkomma-Arithmetik - bis zum brechen ...

von Jonas B. (jibi)


Lesenswert?

float = wert mit komma, einfache genauigkeit, 16 bit
double = wert mit komma, doppelte Genauigkeit, 32 bit
byte, short, int, long = wert ohne Komma, 8,16,32,64 bit lang (x86)

>Übe Dich in Festkomma-Arithmetik - bis zum brechen ...
Bist du es verstanden hast, sollte genügen :)

Gruß Jonas

von (prx) A. K. (prx)


Lesenswert?

Wenn das Zeug schon in Form von ASCII-Fliesskommawerten reinkommt, dann 
ist das Festkommaarithmetik eher der falsche Ansatz.

von (prx) A. K. (prx)


Lesenswert?

Jonas Biensack schrieb:

> float = wert mit komma, einfache genauigkeit, 16 bit
> double = wert mit komma, doppelte Genauigkeit, 32 bit

Und wenn du das jeweils mit 2 multiplizierst, dann stimmt es sogar. 
Zumindest der Länge nach, wenngleich nicht in der Bedeutung.

von brechpunkt (Gast)


Lesenswert?

hmmmm.... verdammt.  Ich habe nicht geschnallt, dass double ebenfalls 
ein Fließkomma-Wert ist.
Ich danke euch.


Jedoch allein schon das Gespärch mit meinem Chef hat mir wieder gezeigt, 
dass es oft ein großer Schuss nach hinten ist, wenn man den Chef in der 
Arbeit fragt. Um zu vermeiden danach nicht als gänzlicher Vollidiot da 
zu stehen, investiert man (ich) lieber doppelt so viel Zeit um in Google 
zu recherchieren oder in Foren zu fragen.
Geht es da eigentlich nur mir so?

Auch wenn es stimmt, dass das zu den basics gehört, möchte man solchen 
Gesprächen doch lieber aus dem Weg gehen. Und erst Recht bei der 
Gehaltsverhandlung hat man keine Lust sich soetwas noch mal anhören zu 
müssen.

von Gelbe Wanderameise (Gast)


Lesenswert?

A. K. schrieb:
> Wenn das Zeug schon in Form von ASCII-Fliesskommawerten reinkommt, dann
> ist das Festkommaarithmetik eher der falsche Ansatz.

Nichts hindert Dich daran, aus einem String z.B. ein long zu machen.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

A. K. schrieb:
> Wenn das Zeug schon in Form von ASCII-Fliesskommawerten reinkommt, dann
> ist das Festkommaarithmetik eher der falsche Ansatz.

Sorry, seh ich komplett anders. Grad dann ist es einfach, die 
Zeichenkette gleich als Festkommazahl abzulegen.

Nur falls du vor hast, wissenschaftliche Berechnungen durchzuführen, 
wären Fließkommazahlen unter Umständen sinnvoll. (Ob ein Mikrocontroller 
für wissenschaftliche Berechnungen die richtige Wahl ist, sei mal 
dahingestellt.)

Für alles andere, insbesondere für zu verarbeitende Messwerte, eignen 
sich Festkommazahlen deutlich besser. Vor allem lassen sie sich um ein 
Vielfaches schneller verarbeiten. Und man vermeidet so tolle 
Fließkommaeffekte wie "1,2 / 3 = 0,399999999".

von (prx) A. K. (prx)


Lesenswert?

Gelbe Wanderameise schrieb:

> Nichts hindert Dich daran, aus einem String z.B. ein long zu machen.

Solange man nichts über die einlaufenden Zahlen weiss, ausser dass sie 
in Fliesskommadarstellung vorliegen, kann man guten Gewissens keine 
Festkommadarstellung empfehlen.

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
Noch kein Account? Hier anmelden.