Forum: Mikrocontroller und Digitale Elektronik Frage zu Float


von Thorsten (Gast)


Lesenswert?

Hi!!
Möchte gerne mit einem Atmega float-Zahlen berechnen. Wieviel Zahlen 
hinterm Komma sind möglich? Würden Berechnungen mit 
+9,9999999....-9,9999999 funktionieren, also mit 7 Stellen hinterm 
Komma??
Gruß

von Gast (Gast)


Lesenswert?

Das kommt immer darauf an wie schnell du rechnen willst. Im prinzip ist 
alles möglich dauert dann halt ne Weile

von A.K. (Gast)


Lesenswert?

32bit float rechnet auf 6-7 Stellen genau, egal ob die vor oder nach dem 
Komma sind. Deine Zahlen haben 8 Stellen. Also: Nein.

Deine Forderung klingt allerdings nach Festkomma. Und das geht bereits 
mit 32bit Integer-Rechnung (9 Stellen), ggf. zwischendrin mit 64bit 
Integers.

von Thorsten (Gast)


Lesenswert?

Vielen Dank!
@ A.K. hast Du einen Link parat der da Näher drauf eingeht??

von Karl H. (kbuchegg)


Lesenswert?

Thorsten wrote:
> Hi!!
> Möchte gerne mit einem Atmega float-Zahlen berechnen. Wieviel Zahlen
> hinterm Komma sind möglich? Würden Berechnungen mit
> +9,9999999....-9,9999999 funktionieren, also mit 7 Stellen hinterm
> Komma??
> Gruß


float ist auf einem ATmega mit WinAvr 4 Bytes gross.
Normalerweise sagt man, dass das ca. 5, 6 bis 7 signifkante
Stellen bringt.

Achtung: Signifikante Stellen sind nicht gleich Nachkommastellen.
Signifikante Stellen sind alle Stellen beginnend von links.
D.h. mit der Zahl 1234.56
hast du bereits 6 sigifikante Stellen aufgebraucht.

Die Sache wird aber noch schlimmer: Je mehr du mit dem float
rechnest umso mehr Rundungsungenauigkeiten reist du dir auf.
Nach ein paar zig float Rechnereien kann es durchaus sein, dass
du nur noch 4 bis 5 signifikante Stellen übrig hast. Je mehr
du mit einer Variablen rechnest, desto weniger korrekte
signifikante Stellen bleiben übrig. Alles was dann nach
diesen Stellen rechts noch kommt, ist mehr oder weniger 'gelogen'.
Natürlich lässt sich nachvollziehen wie diese 'gelogenen' Stellen
zustande kommen. Sie haben aber nur noch wenig mit dem korrekten
Ergebnis zu tun.

von A.K. (Gast)


Lesenswert?

Der Link zeigt ein paar Zentimeter über die Augen (die eigenen) und soll 
an den Matheunterricht erinnern.

von 20° (Gast)


Lesenswert?

Gute C-Compiler(Fa.Keil) bieten die Wahl der doppelten Genauigkeit, z.B. 
14-stellig.

von Zacc (Gast)


Lesenswert?

@Karl heinz Buchegger,
es ist nicht so, dass man Duzende Float operationen braucht um von 6 auf 
4 Stellen zu kommen. Eine Subtraktion genuegt um von 6 auf 2 stellen zu 
kommen. Man sagt dann das Problem sein schlecht konditioniert. Das kann 
natuerlich auch mit double passieren. Will heissen, man ist nicht 
automatisch mit double auf der sicheren Seite.

von Karl H. (kbuchegg)


Lesenswert?

Zacc wrote:
> @Karl heinz Buchegger,
> es ist nicht so, dass man Duzende Float operationen braucht um von 6 auf
> 4 Stellen zu kommen. Eine Subtraktion genuegt um von 6 auf 2 stellen zu
> kommen. Man sagt dann das Problem sein schlecht konditioniert.

:-)
Überfall ihn doch nicht gleich mit solchen Horrorszenarien.
:-)

Aber du hast natürlich recht. Floating point ist eine Wissenschaft
für sich.
http://docs.sun.com/source/806-3568/ncg_goldberg.html

> Das kann
> natuerlich auch mit double passieren. Will heissen, man ist nicht
> automatisch mit double auf der sicheren Seite.

Wie wahr, wie wahr.

Nie werde ich mein 3D Roboter Simulationssystem vergessen. Im Test
hat alles klaglos funktioniert und für die Demo beim General-
direktor der VOEST Alpine haben wir dann mal ein längeres
Robot Programm simuliert und natürlich nicht vorab getestet.
Die Gesichter wurden immer länger nachdem die Geometrie des
Robots nach ein paar zig-tausend Matrix-Operationen immer unförmiger
wurde und dann regelrecht explodiert ist. War irgendwie peinlich,
denn schliesslich hat die VOEST eine Truppe von 6 Mann über
einen Zeitraum von 2 Jahren finanziert und dann sowas.



von Johannes S. (johanness)


Lesenswert?

Ich hab das zum Glück noch nie bei so etwas wichtigem erlebt :)
Hab mich nur gewundert, dass in einem physikalischen Modell alles bei 
kleineren Simulationsschritten nicht genauer, sondern nur kleiner 
wurde...

Wir haben in "Computational Physics" gelernt:

-> Das Modell sollte von der Mathematik her keine Energie erzeugen oder 
vernichten. Und wenn es das durch numerische Fehler doch tut, dann gibt 
man eben einfach hinter jeden Rechenschritt einen Faktor ins EM-Feld, 
der die Energie ausgleicht. <-

Tja, das tat ich dann auch, nur habe ich durch den Faktor anschließend 
Energie ins gesamte System gepumpt, während sie nur an einer Stelle 
durch die Numerik verschwand => auch Mist ;)

Nicht umsonst hatten wir ein Semester lang eine Vorlesung "Numerik", das 
ist echt ne Wissenschaft für sich.

von Zacc (Gast)


Lesenswert?

Genau so ist es. Wenn man nicht vor Stabilitaetsproblemen gewarnt wurde 
hat man die Problematik der numerischen Verarbeitung weder angeschaut, 
noch debugbar gestaltet. Wenn man schon zu faul ist das Problem genau zu 
analysieren (ist man sicherlich), sollte man wenigstens ein 
Debuginterface angedacht haben um Prozesswerte in Echtzeit ueber 
laengere Zeit anschauen zu koennen.

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.