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
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.
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
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.
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
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.
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.
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.
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.
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?
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.
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.
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.
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