alles noch gut!
Wenn mein ATmega128 das selbe machen soll kommt bei ihm raus:
1
-2644.577400000
das sieht auf den ersten Blick nicht schlimm aus. Jedoch kommen danach
noch ein paar andere Rechenoperationen, die noch länger sind und der
Fehler wird immergrößer....
Ich rechne übrigens in
Passt doch, was willste?
Wahrscheinlich rechnet Excel in double, deswegen die hoehere
Genauigkeit. Das kannst auf nem AVR aber mal getrost vergessen.
Vielleicht waere es sinnvoll, wenn Du mal sagst, was Du vor hast und
nicht versuchst, von Deiner suboptimalen Loesung fuer das verschwiegene
Problem auszugehen. Das ist uebrigens in Foren immer gut ;)
Ist Matze und Daniel jetzt die selbe Person? oO"
Mein Punkt ist: Wahrscheinlich brauchst Du ueberhaupt kein Fliesskomma
fuer die Anwendung. Bei GPS-Koordinaten, die man in Graden, Minuten und
Sekunden angeben kann, sehr wahrscheinlich auch nicht. Im Zweifelsfall
kann man auch noch mit Fixpunktarithmetik rechnen. Das spart ausserdem
ne Menge Flash-Speicher auf dem AVR und laeuft um einiges schneller.
Die natuerlichen Zahlen heissen "natuerlich", weil sie von der Natur
gegeben sind. Alles andere ist eine Erfindung der Menschen. Das sollt
man sich klar machen an der Stelle ;)
Greets,
Michael
P.S. Das sind diese "kaum macht man es richtig, funktioniert es"-Momente
:D
Michael G. schrieb:> Ist Matze und Daniel jetzt die selbe Person? oO"
Nein, aber wie auch Klaus habe ich das als Koordinaten bei Google Maps
eingegeben ;)
Wenn es denn um GPS geht würde ich aber sagen, dass man dort keine
sieben Kommastellengenauigkeit benötigt, alleine die Messungenauigkeit
sollte schon einen weitaus größeren Fehler einbringen...
@ Klaus Wachtler: nein, die Koordinaten sind zufällig gewält, ich
brauchte welche um meine Rechnung zu verifizieren.
@ Daniel H.: Doch, 7 Stellen nach dem Komma sind schon in meinen Augen
wichtig! Auch wenn vielleicht sogar die letzten 2 Stellen Messfehler
sein können, so muss man damit in der Regel bis zu Ende weiterrechnen
und erst dann den Fehler rausziehen. Zumindest habe ich das so gelernt.
Generell habe ich mich für die Lösung mit der Festkommaarithmetik
entschieden. Allerdings kämen bei z.B. 52, xxxxxxx° zu großer Werte
heraus, daher wird nun erst das Delta der Koordinaten gebildet und damit
gerechnet. Danach werden die errechneten Koordinaten dann wieder zum
Stützvektor verschoben. So bleibt der Fehler gering und ich kann auch
mit 7 Stellen hinter dem Komma einfach und schnell rechnen.
Grüße an alle die, die vernünfige Kommentare gebracht haben!
Matze Niemand schrieb:> So bleibt der Fehler gering und ich kann auch> mit 7 Stellen hinter dem Komma einfach und schnell rechnen.
auf einem ATmega128 kann man mit float nicht schnell rechnen, das kann
gar nicht sein.
Peter schrieb:> Matze Niemand schrieb:>> So bleibt der Fehler gering und ich kann auch>> mit 7 Stellen hinter dem Komma einfach und schnell rechnen.>> auf einem ATmega128 kann man mit float nicht schnell rechnen, das kann> gar nicht sein.
Er schrieb ja auch Festkommaarithmetik.
>auf einem ATmega128 kann man mit float nicht schnell rechnen, das kann>gar nicht sein.
Das stimmt doch garnicht! mul und div in float werden ähnlich schnell
gerechnet wie in 32bit int.
Es gibt auch Compiler für AVR, die double (64bit) rechnen. Der von IAR
braucht bei 16MHz für eine double mul etwa 50-60µs.
Und dann gibt es auch Leute, die sich Mühe gegeben haben, für den AVR
eine günstige Lösung zu stricken:
Beitrag "64 Bit float Emulator in C, IEEE754 compatibel"
Peter schrieb:> auf einem ATmega128 kann man mit float nicht schnell rechnen, das kann> gar nicht sein.
'Schnell' gibt es nicht, nur 'schnell genug'. Für ein paar hundert
Rechenoperationen pro Sekunde ist er auf jeden Fall schnell genug, für
ein paar Hunderttausend auf jeden Fall nicht mehr. Alles dazwischen
hängt von den Anforderungen ab.