mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Float


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Gast (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

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

Autor: 20° (Gast)
Datum:

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

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.



Autor: Johannes Slotta (johanness)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.