wurzelberechnung und potenzrechnen im assembler

Gast #463296
Lesenswert?

@ Alex Black

Ich hab mal eine Implementierung in C gemacht (ohne Tabellen, Ergebnis 
stimmt auf so 4 bis 6 Nachkommastellen).

Die Genauigkeit wirst du aber für den AVR runterschrauben mussen,
sonst rechnet der recht lang (oder muss es eh nicht schnell sein?).

Floating point wird aber noch immer vorausgesetzt.

Falls du noch daran interessiert bist, könnt' ichs mal posten.


   Wiesi
Gast #463350
Lesenswert?

Zuerst muesste bekannt sein was fuer eine Genauigkeit auf welchem 
Wetebereich benoetigt wird. Dann kann man Speicherplatz gegen 
Geschwindigkeit ausspielen, indem man Tabellen und Operationen 
kombiniert. Eine kleine  Untersuchung wird zeigen wievielten Grades ein 
Polynom sein muss um die Genauigkeit zu erreichen.  Allenfalls ist eine 
Tabelle mit einigen Weten besser. Imterpolieren kann man auch wieder 
linear, oder mit Spline.

holzi
OP #463460
Lesenswert?

Nun estmal danke für die rege beteiligung
Ich will mich da mal präzisieren
ich wil mir nen höhenwarner bauen (bin falschirmspringer)der bei einer 
gewissen höhe anfängt zu piepsen, damit ich bescheid weiß das ich mich 
mal langsam bereit machen sollte zu ziehen. das problem mit tabellen ist 
(habe ich schon angedacht) sie sind statisch und der druck kann sich wie 
bekannt wetterbedingt im tagesverlauf ändern.
dh habe ziehe ich die direkte berechnung vor und in assembler da mir auf 
der berufsschule beigebracht wurde assembler ist schneller als 
hochsprachen.
dh es kommt nicht auf nachkommastellen an sondern auf schnelligkeit.
aus diesem grunde dachte ich mir das so:
vor jedem sprung gerät einschalten es wird der aktuelle druck gemessen
bei 4000m steige ich aus und ab da an muss der controller nun aus 
druckdifferenz die höhe ermitteln und bei 1500m dem piepser anwerfen
so habe ich mir das gedacht
OP #463461
Lesenswert?

muss noch dazu sagen das ich nicht den höheren bildungsweg besritten 
habe ich kenne mich nicht mit logarithmen und e-funktionen aus. habe 
zwar von gehört aber bei nachfrage war immer der selbe satz zu hören von 
den Lehrern braucht ihr nicht ............ ich lese mich da mal ein mhh 
Danke
Gast #463502
Lesenswert?

Es stimmt schon das Assembler schneller ist als Hochsprachen, aber ich 
denke bei 16MHz sollte es auch in C schnell genug sein. Es gibt in 
math.h
die funktion:double exp (double __x) und double log (double __x)
und dann einfach so wie Karl heinz es gemeint hatte.

  b      ( ln a * ln b )
 a   = e

P.S. was hast du für einen Höhensensor? und sollte nicht auch die 
Temperautr einen Einfluss haben?
Gast #463510
Lesenswert?

Assemblercode ist nur dann schneller als C-Code, wenn man wirklich gut 
ASM kann. Meist optimieren die Compiler den Code (im Schnitt) genauso 
schnell wie ein durchschnittlicher ASM programmierer.

(Ohne jetzt wieder die Diskussion ASM vs C lostreten zu wollen, aber am
sinnvollsten ist immer eine Mischung, sofern man weiß, was man tut.)

Die Mathemathikroutinen die der Compiler einbindet sind sowieso meist 
handoptimiert.


   Wiesi
Gast #463534
Lesenswert?

> berufsschule beigebracht wurde assembler ist schneller als hochsprachen.

Naja, wie in Berufsschulen so üblich, der vermittelte Stoff ist im 
Schnitt 20 Jahre veraltet.

Diese Aussage stimmt nämlich nur noch sehr beschränkt. Heutige, moderne 
Compiler, besonders auf leistungsstarken Prozessoren, erzeugen in den 
allermeisten Fällen deutlich schnelleren Code als ein Mensch der direkt 
in Assembler programmiert.

Für Deinen Fall wäre das beste, das einfach in C zu programmieren. Da 
kannst Du dann Deine Formel einfach im Source-Code reintippen und gut 
ist.

http://www.nongnu.org/avr-libc/user-manual/group__avr__math.html
#463538
Lesenswert?

> assembler ist schneller als hochsprachen.
> dh es kommt nicht auf nachkommastellen an sondern auf schnelligkeit.

Aber nur dann wenn es einen Unterschied macht ob die Warnung
eine Millisekunde früher oder später kommt. In Deinem Fall
dürfte das überhaupt keinen Unterschied machen. So schnell
kannst du sowieso nicht reagieren :-)
#463541
Lesenswert?

Wenn du das dann in C machst, dann heist die Funktion pow()

Eine Wurzel ist dann: potenzieren mit dem Kehrwert.
Eine Quadratwurzel (*) aus x wäre also: pow( x, 1.0 / 2.0 )
Die 5.244 Wurzel ist dann:  pow( x, 1.0 / 5.244 );

(*) Der Vollständigkeit halber: Quadratwurzeln braucht man
häufiger. Dafür gibt es eine eigene Funktion: sqrt()
Gast #463548
Lesenswert?

Hallo Alex,

für Deinen Anwendungsfall kannst Du die vereinfachte barometrische 
Höhenformel nehmen (e-Funktion). Die komplizierte ICAO 
Standard-Atmosphäre erfordert eine sehr genaue Wurzel-Berechnung um 
genau zu sein (zumindest 5 kommastellen).

Gruß
Mario
Gast #463571
Lesenswert?

> vor jedem sprung gerät einschalten es wird der aktuelle druck
> gemessen bei 4000m steige ich aus und ab da an muss der controller
> nun aus druckdifferenz die höhe ermitteln und bei 1500m dem piepser
> anwerfen so habe ich mir das gedacht

Hmm, muss das dann überhaupt so kompliziert sein?

Kannst Du nicht einfach die Faustformel 1 Hekto-Pascal = 8 Meter 
verwenden?

Also:

1.) Am Boden Tastendruck abwarten und dann Druck speichern.
2.) Sobald der Druck um 200 hPa (1600m) seit Tastendruck angestiegen
    ist, schaltet sich das Gerät automatisch scharf.
3.) Sobald die Differenz zwischen aktuellem Druck und gespeichertem
    Druck kleiner als 188 hPa (1500m) wird, Piepser einschalten.

Mehr brauchst Du doch nicht, oder?
OP #463651
Lesenswert?

>Kannst Du nicht einfach die Faustformel 1 Hekto-Pascal = 8 Meter
>verwenden?

Mh das wäre ne möglichkeit, versuche ich die mal ist unkompliziert und 
auch klangschön. wenn sie annäherungsweise das gewünschte ergebniss 
ausspuckt bin ich zufrieden

Zur frage mit welchem drucksensor ich arbeite, kann mich noch nicht 
entscheiden zwischen den barometermodulen von intersema (MS5540)und den 
motorola mpx4100. wobei ich mir erst mal das programm schreibe und dann 
den sensor aussuche
weiß ist nicht unbedingt ein guter weg habe aber momentan nicht die 
mittel um  mir exemplahre zu kaufen und meinen cheff sehe ich erst 
nächstes jahr wieder dann kann ich ihn fragen ob er diese als sampels 
bestellen kann ( bin knauserich geworden )

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