Forum: Mikrocontroller und Digitale Elektronik rechnen mit potenz(Kommazahl)


von andy (Gast)


Lesenswert?

Hallo,nachdem mir hier schon sehr gut bei einer anderen Rechnung 
geholfen wurde,habe ich ein neues Problem.
Die Formel lautet:
1
F= 13,233 * rf * ((10hoch (7,5 * T)/(237 + T)))/(237,16 + T)


Das problem ist folgendes.Bei T = 20 kommt 10 hoch 0,584 raus.
Wie rechne ich den Wert von 10 hoch 0,584 in assembler auf einem mega32
aus?Der Rest der Rechnung hab ich hinbekommen.
Wäre nett,wenn mir jemand das erklären könnte.

gruss
andy

von Wolfgang S. (wsm)


Lesenswert?

Mit dem verallgemeinerten Hornerschema zur Berechnung von Wurzeln kann 
man auch alle anderen Wurzeln bzw. Potenzen ausrechnen. Daraus ergibt 
siche eine Iteration.

Oder einen Logarithmus zur Basis 2 von 10 berechnen, diesen mit 0,584 
multiplizieren und 2 mit dem Ergebnis potenzieren.

Mit der Basis 2 sind log und Potenz erwas einfacher als mit anderen 
Basen.

von andy (Gast)


Lesenswert?

Danke für die antwort.Aber könntest du das vielleicht etwas einfacher 
erklären oder ein Beispiel schreiben,wie das zum beispiel mit
10 hoch 0,584 geht.Ich muss das Prinzip verstehen,da sich T ständig 
ändert.

gruss
andy

von Martin (Gast)


Lesenswert?

Wolfgang meint, dass es einfacher ist mit der Basis 2 zu rechnen.

Logarithmus von 10 zur Basis 2: 3,321928095.
Multiplikation von 3,321928095 mit 0,584: 1,940006007.
Endergebnis 2 hoch 1,940006007: 3,837072454.

Warum dies leicher ist? Keine Ahnung.

Wie viele verschiedenen Werte nimmt denn dein T an? Wenn es wenige Werte 
sind: Tabelle. Wenn es viele Werte sind: Iteration nach Newton.

von Wolfgang S. (wsm)


Lesenswert?

Da man ggf. einen Algorithmus für log in Assembler schreiben muss, ist 
es einfacher diesen unter Berücksichtigung der Basis 2 zu schreiben.

W.

von andy (Gast)


Lesenswert?

Hallo,danke für die antworten.T steht für gemessene Temperatur,also sehr 
viele unterschiedliche Werte.
Jetzt ist es schon etwas klarer.Aber wie rechne ich 2 hoch 1,94?
Wenn ich 1,94 mit 256 multipliziere bekomme im 496 raus.
2 hoch 496 ist aber ziemlich riesig.Oder gehe ich die Sache jetzt falsch 
an?

gruss

andy

von Martin (Gast)


Lesenswert?

Eine Möglichkeit wäre 2 hoch 1 x 2 hoch 1/2 x 2 hoch 1/4, ..., usw. zu 
rechnen und jedesmal zu prüfen, ob die Potenz berechnet werden muss und 
sie dann abziehen. Je nach gewünschter Genauigkeit

Die ersten 5 Potenzen von 1,94 sind 1, 1/2, 1/4, 1/8, 1/16.

von Wolfgang S. (wsm)


Lesenswert?

Logarithmen und Potenzen in Assembler zu schreiben ist etwas länglich. 
Wenns läuft aber recht schnell. Dafür gibts aber auch 
Reihenentwicklungen nach Fourier.


Für 2^1,94 passt jetzt die Fourier-Reihe für 2^x. Die ist dann mit 
elementaren Rechenoperationen (+,-,*,/), die dir ja zur Verfügung 
stehen, auszurechnen.


W.

von Karl H. (kbuchegg)


Lesenswert?

Hast du schon abgeklärt, ob nicht eine Näherung eine ausreichende 
Genauigkeit bieten würde?

Diese Berechnungen in Assembler zu machen dürfte sich als ziemlich 
unangenehm herausstellen.

von DirkB (Gast)


Lesenswert?

Wenn T die Temperatur ist, stimmt dann 237,16 oder meinst du 273,16.
Hat zwar nichts mit dem potenzieren zu tun ergibt aber trotzdem ein 
falsches Ergebnis.

von Horst H. (horha)


Lesenswert?

Hallo,

andy schrieb:
> Die Formel lautet:
>
>
1
> F= 13,233 * rf * ((10hoch (7,5 * T)/(237 + T)))/(237,16 + T)
2
>

Deine 237 sind der absolute Nullpunkt mit 273.16 ° Celsius.
Wo kommt denn diese Zahlenwertgleichung her?
Müsste es nicht eher:
10hoch ( (7,5 * T)/(273 + T) ) sein oder "beginnt" die Formel bei -40° 
Celsius?

von Wolfgang S. (wsm)


Lesenswert?

Sorry,

ich habe mich verschrieben.

Ich meine nicht Fourier-Reihe, sondern Taylor-Reihe

W.

von Wolfgang S. (wsm)


Angehängte Dateien:

Lesenswert?

Die Taylorreihe vom Grad 5 für 2^x  habe ich mal angehängt.

für LN(2) kann man natürlich den entsprechenden Zahlenwert benutzen und 
alle auftretenden Potenzen vorher ausrechenen.

Jetzt müsste es auch in Assembler zu machen sein.

W.

von Wolfgang S. (wsm)


Lesenswert?

Ich habe mal für deinen ganzen Term eine Reihenentwicklung erstellt.

F=rf·(3.006156242·t^5 + 0.8707963411·t^4 + 0.2017955946·t^3 + 
0.03507260965·t^2 + 0.004063808881·t + 0.0002354336441)

Dieser Term beinhaltet deine ganze Rechnung und läßt sich direkt 
elementar programmieren.


Der Term läßt sich noch einfacher schreiben:

F=rf·(((((3.006156242·t + 0.8707963411)·t + 0.2017955946)·t + 
0.03507260965)·t + 0.004063808881)·t + 0.0002354336441)

Somit fallen alle Potenzen weg und die Berechnungszeit ist wesentlich 
kürzer, da nur 6 Multiplikationen auftreten.

W.

von Wolfgang S. (wsm)


Lesenswert?

In deiner Formel ist wohl doch ein Fehler drin:

Ich habe für die absolute Feuchte gefunden:
1
AF= 13.233 * rF * ((10 ^ ((7.5 * T) / (237 + T))) / (273.16 + T))

Was stimmt nun ?

Zur Kontrolle kann man unter:

http://www.ib-rauch.de/bautens/formel/abs_luftfeucht.html

nachrechnen.


W.

von Wolfgang S. (wsm)


Lesenswert?

Die letzte Formel

F=13.233·rf·(10^(7.5·t/(237 + t))/(273.16 + t))

ist wohl richtig.

Ich habe mal 2 Beispiele durchgerechnet.

Dafür erhält man die Taylorreihe

F=rf·(1.004745136·10^(-10)·t^5 + 1.763389900·10^(-8)·t^4 + 
1.729932431·10^(-6)·t^3 + 0.0001014403429·t^2 + 0.003352613162·t + 
0.04844413563)


W.

von andy (Gast)


Lesenswert?

Hallo,da hab ich einen Fehler gemacht,es muss natürlich 273,16 heissen.
Danke für die antworten,ich werde es jetzt mal mit

F=rf·(((((3.006156242·t + 0.8707963411)·t + 0.2017955946)·t +
0.03507260965)·t + 0.004063808881)·t + 0.0002354336441)

versuchen.

gruss

andy

von DirkB (Gast)


Lesenswert?

Nimm mal lieber die Parameter von Wolfgang Schmidt von 14:29.
Die sind mit den 273,16 berechnet. (In deiner zitierten Formel ist noch 
der Fehler drin)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.