PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kommazahl / kommazahl in assembler



tristate
22.02.2005, 00:20
da ich normalerweise alles in c schreib nun aber doch mal assembler benötige (was mittlerweile auch ganz gut klappt) bin ich mit meinem wissen am ende...
wie schreib ich eine routine die mir einfach 2 kommazahlen dividiert??? also zb 285.9375/7.586 ???? die genauigkeit auf 4 stellen hinterm komma sollte schon gegeben sein..
hab nen mega128 also da ist ein hardware multiplier mit drin (mul,muls,mulsu,fmul,fmuls,fmulsu-befehle)aber eine einfache multiplikation ist damit ja schon ziemlich aufwendig... da mein projekt aber ziemlich zeitkritisch ist und ich auch nicht den µc zumüllen will muss ich halt auf assembler zurückgreifen. ich hoff doch mal das ihr mir helfen könnt
mfg

JanB
22.02.2005, 06:41
Hallo,
du kannst fertige Floatingpoint-Routinen benutzen,
die gibt es glaube ich bei Atmel. Das kostet natürlich
jede Menge Rechenzeit und Speicherplatz,

Wenn du mit Festkommazahlen klarkommst,
dann kannst du einfach mit grossen Integerzahlen
ganz normal ganzzahlig Rechnen, und das Komma nur
"virtuell" mitführen, und es falls nötig, bei einer
Ausgabe auf Display oder so mit einfügen.
Also statt 123,456 rechnest du einfach mit 123456.
und denkst dir das Komma.
Die Ergebnisse stimmen trotzdem, du musst nur
eine feste Zahlenlänge definieren und beibehalten.
z.B. 32-Bit = 4 Byte geht von -2147483648 bis +2147483648.
Mit vier Stellen hinter dem Komma dann eben
von -214748,3648 bis 214748,3648
Dafür kannst du damit in Assembler
einfach, genau und blitzschnell rechnen.

Gruß Jan

engineer
22.02.2005, 08:52
Ja, wie hier oben drüber geschrieben zusätztlich: Wenn Du weisst in welchem Zahlenbereich Deine Rechnungen jeweils laufen, so kann man das Komma an verschiedenen Stellen immer etwas anders iontegpretieen um die Auflösung besser zu nutzen. So könnte man bei bestimmten Rechnbungen mal einen Faktor 4 oder 8 drinlassen und ihne an derderer Stelle berücksichtigen

Ich nennen sowas "binäres Ausklammern"

tristate
22.02.2005, 10:00
ok das mit dem "virtuellem" komma hab ich nicht gewusst. ah ich glaub ich habs gerafft.. naja ganz schön umständlich
also danke für die antworten

@janB :wo gibts die routinen hab nix gefunden
mfg

engineer
22.02.2005, 11:17
sag mal tristae, Dein UserICon errinnert mich schwer an einen user auf www.kaltmacher.de. Bist Du das ?

tristate
22.02.2005, 11:30
Nein, seh dort aber mom eh keine bildchen

tristate
22.02.2005, 11:46
mh jetzt nochmal zum thema gibts da nicht irgendwelche fertige routinen die man einfach einbinden kann ich muss eine x^4 funktion mit werten füttern die mir dann ein bestimmtes pulsmuster liefert nur mit den ganzzahlen + "virtuellem" komma gibt das ein riesigen code bei dem ich noch nicht mal weiss ob er für alle meine zahlen auch funktioniert...

na hier mal die funktion:

alpha= variable
verh=11.4583
p=alpha*verh
a=0.00125*p^4 - 0.002325*p^2
y=0.03*x^4/a-0.14*x^2/a+4.6
y=y*1000

gut ne??? :) soll mal ne motorsteuerung werden(sanftanlauf + sanftstop)
mfg

engineer
22.02.2005, 13:05
naja, für die p^4 benötigt man aber keine Funktion oder ? Zeimal quadrieren würde ich sagen. Du weisst, wie man binär multimpliziert ?

tristate
22.02.2005, 13:24
das problem ist nicht die p^4 sondern eher die ganzen kommas

unter funktion meinte ich eine "mathematische funktion" also quadratische, kubische...usw

na ich glaub ich bleib doch beim guten alten c mir ist das viel zu umständlich

mfg

engineer
22.02.2005, 13:46
Eine Lib in ASM habe ich nicht zur Hand- aber es gibt solche. Diese sind aber auf die Architektur (8,16,32) zugeschnitten. Da würde ich mal googeln. An Deiner Stelle würde ich ein paar Standarrealisatioen nachprogrammieren. Die binäre Multiplikation ist an vielen Stellen erklärt und funktioniert sehr effektiv. Vergiss nicht, daß diese Operatione um Größenornungen schneller laufen, als Fließkomma!

Wenn Du ein Auflösungsproblem hast, nimm einfach mehr Bytes: Auch in der professionellen Digitaltechnik macht man das so: Es gibt inzwischen Hersteller von Studiotechnik, die programmieren ihrer DSPs in den Pulten lieber in 48Bit binär, als mit 32 Bit Float.

tristate
22.02.2005, 15:01
na noch ist die hoffnung nicht ganz erloschen...schliesslich weiss ich immer genau was wann in meinem µc abgeht und das ist ein riesen vorteil...
werd mal noch ein paar sachen probieren
mfg