Pages: [1]   Go Down
Author Topic: Mathe: v1*2 hochX  (Read 2057 times)
0 Members and 1 Guest are viewing this topic.
Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich habe mal wieder eine Frage.
Wie kann ich mit dem Arduino folgende Rechnung anstellen:
float T1 = T2*(2 hoch T3);

Bin für Hilfe dankbar,
Stefan
Logged

Freiburg-Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Azubi Elektroniker für G&S
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das korrekte Zeichen für eine Potenz ist in "der" schreibweise 2^3(2 hoch 3)
ob das der Compiler versteht weiß ich nicht aber vielleicht hilft es dir ja trotzdem weiter.

LG M²
Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tut er leider nicht...
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

So funktionierts auch nicht. Dafür ist in C die Funktion pow() zuständig.
Logged

_______
Manfred

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich mit dem Arduino folgende Rechnung anstellen:
float T1 = T2*(2 hoch T3);

Im speziellen Fall von "2^" sollte auch folgendes gehen, das ist schneller und sicherer als pow():
(pow() hat bei mir schon das ein oder andere Mal "Näherungswerte" ausgespuckt. smiley-sad)

Code:
T1 = T2*(1<<T3);

Btw. ist die Konvention normalerweise so dass Variablen vorne klein geschrieben werden. Erhöht die Lesbarkeit... smiley-wink
« Last Edit: July 28, 2011, 01:22:23 am by Joghurt » Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oh super,

also T1 = T2 * pow(2,T3); funktioniert sehr gut.
Was genau macht das hier "<<" ?

Ich werde meine Variablen umstellen, lesbarkeit ist kein Fehler. Danke

Logged

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Was genau macht das hier "<<" ?

Guckst Du auf der immer hilfreichen Referenzseite nach "<<"... smiley-wink

Im Prinzip macht das ein "*2", und zwar so oft wie die Zahl die hinter dem "<<" steht.
Und mit "1" vor dem "<<" ist das das Gleiche wie ein "2^" und damit genau das was Du möchtest. smiley

Der besondere Vorteil ist dass Bitshift-Operationen nur einen Taktzyklus dauern, wohingegen schon eine Multiplikation zwei Taktzyklen kostet und die Benutzung der pow()-Funktion, da sie ja eine Funktion ist, noch ein gutes Stück länger dauert. smiley-wink
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

<< und >> verschieben die Bits des Wertes um die angegebene Anzahl Stellen nach links bzw. rechts. Jede Stelle um die verschoben wird entspricht einer Multiplikation mit 2 bzw Division durch 2. Darum passt es im vorliegenden Fall auch nur für die Zahl 2.
« Last Edit: July 28, 2011, 01:50:56 am by MaFu » Logged

_______
Manfred

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist ja super! Performance wäre jetzt meine nächste Frage gewesen.
Vielen Dank - das bitweise verschieben im binären ist sehr edel - da wäre ich nicht drauf gekommen!
Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist ja super! Performance wäre jetzt meine nächste Frage gewesen.
Vielen Dank - das bitweise verschieben im binären ist sehr edel - da wäre ich nicht drauf gekommen!

Aber schön dran denken, dass die Verschieberei nur bei Typen wie char, int, long und den vorzeichenlosen "Brüdern" davon funktioniert. pow() hingegen kann auch mit Gleitkommazahlen als Basis und Exponent arbeiten.
Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay, ich werde wohl unsigned long nehmen, es geht um einen kleinen Taschenkomputer zur Belichtungssteuerung einer Kamera... Es dreht sich also um Millisekunden.
Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

So, nun habe ich meine Formel fertig. Ich werde wohl pow() nehmen, weil ich (natürlich) auch Kommawerte verwenden muss. Das habe ich wohl übersehen. Ich habe einen kleinen Test gemacht und die Berechnung (5*pow) benötigt 584 Mikrosekunden. Damit kann ich gut leben und danke hiermit allen Helfern!

Logged

Pages: [1]   Go Up
Jump to: