Eigentlich beklage ich mich über das sehr enttäuschende Ergebnis von 162.0 /10 = 16.199999...Zitat:
Zitat von for_ro
Das bekomme ich ohne Controller/Computer genauer hin!
Morgen teste ich mal &B10100010 / &B1010 = ???
Druckbare Version
Eigentlich beklage ich mich über das sehr enttäuschende Ergebnis von 162.0 /10 = 16.199999...Zitat:
Zitat von for_ro
Das bekomme ich ohne Controller/Computer genauer hin!
Morgen teste ich mal &B10100010 / &B1010 = ???
Das Problem ist wie oben schon mal erwähnt, dass sich einige zahlen, die als Dezimalzahl noch ganz einfach aussehen sich nicht exakt im binären Fließkommaformat darstellen lassen. Wenn da beim Umwandeln zurück ins Dezimalformat nich genügend gerundet wird, sieht man halt den kleinen Unterschied. Eine typische Zahl die nicht geht ist 0,1. Dafür geht so etwas wie 7/8192 ohne Probleme.
Als ein altes recht krasses Beispiel, gab es bein C64 den effekt, das man wenn man 20 mal 0,1 aufaddiert hat nicht genau 2 rausbekommen hat.
Auch für die Dezimalzahl 16,2 gibt es Binärsystem keine Darstellung. Du kommst zwar beliebig genau heran, aber treffen kannst du sie nicht. Schon gar nicht mit 16 oder 32 Stellen. Wenn du 32 Stellen hinter dem Komma hättest (Single hat insgesamt 32 Stellen), dann wäre dein Ergebnis 16,199999999953434. Alle Systeme werden sich von unten "herantasten". Denn wenn du einmal drüber bist, kannst du durch weiteres hinzufügen nicht mehr drunter kommen.Zitat:
Zitat von Tido
Aber wie ich dir oben schon geraten habe, nimm einfach die Fusing Funktion und gut ist. Man muss lernen, die Beschränkungen eines Systems zu verstehen und diese zu nutzen.
Ok,
ich gebe mich mit diesen Einschränkungen zufrieden.
Hauptsache ich habe hinterher in der Variable Akku irgendwie den Wert 16,2.
Leider funktioniert das mit round nicht, denn dann gibt's keine Nachkommastellen (deshalb ja auch die Idee, erst zu runden und dann durch 10 zu teilen).
Ich denke, ich werde mir die Division durch 10 sparen und später bei der LCD-Ausgabe einfach das Komma an der richtigen Stelle einfügen.
Den Umweg über einen string sehe ich gar nicht ein.
Hast du das mal probiert? Es macht exakt das, wonach du seit Stunden fragst.Zitat:
Zitat von for_ro Verfasst am: Mo 20 Jul 2009, 19:39
Warum muss in Akku der Wert 16,2 sein? Wo es sowieso nicht möglich ist, wie ich dir gezeigt habe. Lass doch den scheinbar ungenauen Wert drin. Nur wenn du ihn ausgibst, machst du den Wert für Menschen leichter lesbar.
Der Wert von Akku muss mit einem Byte per I²C übertragen werden, also bleibt nur der Wertebereich von 0 - 255. Deshalb benötige ich ganzzahlige Werte für Akku, also z.B. 162 (nicht 16,2 wie ich geschrieben hatte).
Für die Ausgabe kann ich dann ja Fusing nehme.