Formel in Atmel Studio 4

OP #4407083
Lesenswert?
• ▲
▼
Hallo zusammen, wenn ich folgende Formel für die Konstante speed2ant im 
AVR schreibe, liefert diese nicht das richtige mathematische Ergebniss, 
es liefert Dec 45 es sollte aber Dec 64 liefern. Hab ich einen Fehler in 
der Syntax? :
1
.equ runden     = 4
2
.equ Schritte     = 23
3
.equ speed2ant    =(((runden*30)+Schritte)/100)*45

Danke für eure Hilfe.

Gruß
Gast #4407159
Lesenswert?
• ▲
▼
Luigi A. schrieb:

Flo hat das Wesentliche ja bereits geschrieben.

Eine Alternative zu seinem (völlig korrekten und in jedem Fall zu 
bevorzugendem) Vorschlag der sinnvollen Umstellung der Formel für 
Formel-Umstellungs-Legastheniker mag vielleicht sein, sich zu Nutze zu 
machen, dass der Assembler zur Entwurfszeit auch mit Gleitkommazahlen 
rechnen kann.

Man muss ihn nur dazu zwingen, etwa so:

.equ speed2ant    =(((30.0*runden)+Schritte)/100)*45
                        ^^das ist der Haupt-Trick

Mit ziemlicher Wahrscheinlichkeit wird es dann aber ein Warnung setzen, 
weil der Assembler erkennt, dass die so berechnete Gleitkommakonstante 
sich nicht verlustfrei auf das Integer-Symbol speed2ant reduzieren läßt. 
Um die Warnung zu unterdrücken, gibt es dann noch die nette 
Entwurfszeitfunktion Int(), mit deren Verwendung der Programmierer dem 
Assembler klar machen kann, dass er sich dieser Sachlage durchaus bewußt 
ist. Zusammen sieht das dann so aus:

.equ speed2ant    =Int((((30.0*runden)+Schritte)/100)*45)

Oder, oft (aber nicht immer) sinnvoller: mit einer tatsächlichen Rundung 
der berechneten Konstanten:

.equ speed2ant    =Int((((30.0*runden)+Schritte)/100)*45+0.5)
OP #4407436
Lesenswert?
• ▲
▼
Danke euch für die wertvollen Tips :-). Wäre ich als unerfahrener 
Gelgenheitsprogger nie drauf gekommen.

Ich habe beides ausprobiert und beide Varianten funktionieren.
Die Variate von c-hater funktioniert aber nur wenn ich 4 Klammern 
verwende :

.equ speed2ant    =Int((((30.0*runden)+Schritte)/100)*45)
oder
.equ speed2ant    =((((30.0*runden)+Schritte)/100)*45)

wenn ich 3 Klammern verwende bleibt das falsche Ergebniss:
(((30.0*runden)+Schritte)/100)*45

Einen guten Rutsch wünsche ich euch :-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.