-
-
Erfahrener Benutzer
Fleißiges Mitglied
kommazahl / kommazahl in assembler
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
-
Erfahrener Benutzer
Roboter Experte
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
-
Erfahrener Benutzer
Begeisterter Techniker
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"
-
Erfahrener Benutzer
Fleißiges Mitglied
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
-
Erfahrener Benutzer
Begeisterter Techniker
sag mal tristae, Dein UserICon errinnert mich schwer an einen user auf www.kaltmacher.de. Bist Du das ?
-
Erfahrener Benutzer
Fleißiges Mitglied
Nein, seh dort aber mom eh keine bildchen
-
Erfahrener Benutzer
Fleißiges Mitglied
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
-
Erfahrener Benutzer
Begeisterter Techniker
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 ?
-
Erfahrener Benutzer
Fleißiges Mitglied
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
-
Erfahrener Benutzer
Begeisterter Techniker
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.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen