Forum: Compiler & IDEs GleitkommaZahl in GanzZahl


von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

ich bräuchte mal wieder Hilfe. Ich habe folgendes Problem:

und zwar möchte ich am Microcontroller Rechenoperationen mit 
Winkelfunktionen durchführen. Die dabei errechneten Werte sollen 
anschließend gerundet und dann in eine variable vom Typ character 
abgespeichert werden.

-Meine erste frage ist jetzt, wie bekomme ich folgende rechnung in den 
µC?

-und die zweite frage, wie bekomme ich die rechnungrelativ 
recourcenschonend in den µC.

so, hier mal eine grobe idee wie ich es mir vorstelle:
1
char ergebnis;
2
3
float winkel_grad, winkel_bogenmass;
4
5
winkel_bogenmass = 6.2832 * (winkel_grad) / 360;
6
 
7
ergebnis =  runden( 127 * sinf(winkel_bogenmass) ); // die funktion runden muss ich ebenfalls irgendwie nachbilden

kann jemand ein paar konkrete hinweise geben?

Grüße Tarkan

PS: STM32 & RowleyCrossworks

von Rolle (Gast)


Lesenswert?

Tarkan D. schrieb:

probier mal das:

char ergebnis;

float winkel_grad, winkel_bogenmass;

winkel_bogenmass = winkel_grad * M_PI / 180.0;

ergebnis =  (char)( 127.0 * sin(winkel_bogenmass) );


Falls dein Compiler M_PI nicht kennt schreib 3.14159265





Viel Spass noch

von samreinf@gmx.net (Gast)


Lesenswert?

int round(double d)
{
  return d<0?d-.5:d+.5;
}

ergebnis =  (char)(round( 127.0 * sin(winkel_bogenmass) ));

So würd das Ergebnis nicht nur abgerundet.

von Karl H. (kbuchegg)


Lesenswert?

Tarkan D. schrieb:

> -und die zweite frage, wie bekomme ich die rechnungrelativ
> recourcenschonend in den µC.

Mit einer Tabelle, die die sin-Werte einer Viertelschwingung für ganze 
Grad vorrätig hält. Bei deinen Vorgaben, wie das Ergebnis aussehen soll, 
langt das (eine Tabelle mit 90 signed char Werten) allemal.

von Rolf Magnus (Gast)


Lesenswert?

Die Frage ist halt, was man unter "relativ recourcenschonent" versteht. 
Eine Tabelle braucht mehr speicher, ist laufzeitmäßig aber extrem 
schnell. Die Sinusberechnung zur Laufzeit ist halt im Verhältnis dazu 
sehr langsam, braucht aber nur wenig Speicher. Aber "sehr langsam" ist 
halt auch relativ.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Die Frage ist halt, was man unter "relativ recourcenschonent" versteht.
> Eine Tabelle braucht mehr speicher, [...]

Bist Du sicher, dass die Sinus-Funktion der libc weniger als 90 Bytes 
frisst?

Gruß,

Frank

von Matze T. (gruetzwurschd)


Lesenswert?

An die Tabelle hatte ich auch schon gedacht.

War nur etwas faul :D aber ich denke ich werde es so machen.

In einem ersten schuss sollte es nur zum testen.

Vielleicht kann ich die tabelle mit "const rom" in den flash 
reinspeichern.

Recourcenschonend heißt in meinem fall wenig laufzeitgeschwindigkeit und 
wenig Ram. :) und somit auch wenig kopfschmerzen mit 
gleitkomma(hoffentlich).



Grüße Tarkan

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.