Float to Double
-
Hi!
Ich möchte einen eingelesenen Float Wert in ein Array vom Typ Double speichern!
Das Problem -->Bei Eingabe von 3.2
Der Float Wert ist : 3.2000000
Wenn ich den Wert jetzt im Array speicher.....
Der Double Wert im Array ist : 3.2000000476837158
Kann man das Problem irgendwie umgehen??
-
bei float und double gibt es immer probleme bei manchen zahlen, wg. binärfomat. aber den unterschied find ich schon sehr groß, zeig mal den code.
-
Eingabe ::> 3.2
Float Speichern -->
if (sscanf(argv[1],"%f",&Basis)==1)
Basis hat den Wert::> 3.2000000
double Array[10]; .. Arr[x]=Basis;
-
sdfgh schrieb:
aber den unterschied find ich schon sehr groß, zeig mal den code.
Wieso groß? Das sind 8 signifikante Stellen. Viel mehr kann man von float nicht erwarten, und durch die Typumwandlung nach double wird das ja nicht genauer. Ganz normaler IEEE754-Effekt.
-
Aber wie könnte ich das Problem umgehen??
-
Bist du dir überhaupt im klaren darüber wo das Problem liegt?
-
Tim schrieb:
sdfgh schrieb:
aber den unterschied find ich schon sehr groß, zeig mal den code.
Wieso groß? Das sind 8 signifikante Stellen. Viel mehr kann man von float nicht erwarten, und durch die Typumwandlung nach double wird das ja nicht genauer. Ganz normaler IEEE754-Effekt.
stimmt, hat irgenwie schlimmer ausgeschaut, als es ist.
Thes-One schrieb:
Aber wie könnte ich das Problem umgehen??
Wenn du den Effekt nicht haben willst, dann darfst du nicht mit float/double arbeiten, sondern musst dir selber was bauen, z.B. mit mehreren long variablen oder so.
-
Reicht es nicht aus wenn ich anstatt Float Double benutze??
Nur dann hab ich Probleme mit dem einlesen, da der Wert einfach riesig ist pbwohl ich nur 3.5 eingegeben habe!
-
double löst das "Problem" (ich würde es eher Eigenschaft nennen) von Fließkommazahlen nicht, es verschiebt es höchstens.
#include <stdio.h> int main (void) { printf("float %1.30f\n", 3.2F ); printf("double %1.30f\n", 3.2 ); return 0; }
-
Was das ganze verursacht ist mir jetzt klar aber wie ich die "Eigenschaft" umgehen kann weiß ich net!
Einen Double Wert einlesen klappt irgendwie garnicht!
Float Wert in Double speichern geht auch nicht!Wie dann??
*BITTE HILFE*
-
Thes-One schrieb:
Einen Double Wert einlesen klappt irgendwie garnicht!
Float Wert in Double speichern geht auch nicht!Um double-Werte einzulesen, darfst du natürlich nicht die Formatkennung für float verwenden - richtig wäre %lf (ich liebe scanf/printf :D)
-
Ich habe das mit dem If Probiert aber er leißt trotzdem einfach einen Wert ein!
Nur zur Kontrolle ::> If ( Das ist ein Großes i und ein f)????
-
Thes-One schrieb:
Nur zur Kontrolle ::> If ( Das ist ein Großes i und ein f)????
Knapp vorbei - das sollte eigentlich lf (kleines L und kleines F) sein.
-
Ohhh!
Thx!Heißt das dann soviel wie long float???
Aber mit dem "lf" wird die Näherung des eingegebenen Wertes schon sichtbar, aber es ist immer noch nicht der Wert der Eingegeben wurde!
Eingabe 3.2
mit lf sieht der Wert so aus --> 3.2000000000000002
im Array --> 3.2000000000000002
Wo kommt die 2 her??
-
die 2 dort hinten ist systembedingt - der Computer kann den Wert 3.2 nicht exakt als Binärwert speichern, deswegen wird er am Ende ein wenig gerundet (genausowenig, wie du 1/3 exakt in Dezimalform schreiben kannst).
-
Ah ok!
THX