ATmega128 verrechnet sich (immernoch)

OP #1903824
Lesenswert?

Hi!

Wenn ich in EXCEL
1
= -( (50,74218*50,74218) + (8,355147*8,355147) )
 rechne, dann kommt da raus:
1
-2644,57731254401
 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
1
float

Danke!
Persönliche Seite #1903861
Lesenswert?

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
OP #1904596
Lesenswert?

@ 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!
Gast #1904681
Lesenswert?

>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"
#1904693
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren