Forum: Compiler & IDEs sin cos berechnu


von micha (Gast)


Lesenswert?

habe versucht eine visuele anzeige(grafik lcd 132 x 176) für einen 
drehknopfregler zu schreiben,
ich weiss dass mit einnen array mit 100 positionnen  als tabelle werde 
dass auch funktz,
mit der formel für komplexe zahlen bin ich in der lage positionen in der 
2d ebene zu berechnen also einen kreis mit kerbe(oder kleiner strich)
// d - abstand von dem mittelpunkt
x = d*sin(winkel)+ startpunkt
y = d*cos(winkel)+ startpunkt

habe extra eine variable - winkel in der schleife vergrössert
,aber die werte die funktionnen sin(winkel) und cos(winkel) zuruck 
lifern sind immer 1,

von Uhu U. (uhu)


Lesenswert?

sin und cos erwarten ihr Argument üblicherweise in Bogenmaß: 90° 
entspricht PI/2, 180° : PI ...

von Oliver (Gast)


Lesenswert?

>sin und cos erwarten ihr Argument üblicherweise in Bogenmaß

was sie aber nicht daran hindert, Parameter aus dem gesamten 
Wertebereich eines floats/doubles anzunehmen, und in den allermeisten 
Fällen Ergebnisse ungleich 1 zu liefern.

Wenn immer 1 rauskommt, ist was anderes faul.

Oliver

von Rolf Magnus (Gast)


Lesenswert?

>>sin und cos erwarten ihr Argument üblicherweise in Bogenmaß
>
> was sie aber nicht daran hindert, Parameter aus dem gesamten
> Wertebereich eines floats/doubles anzunehmen, und in den allermeisten
> Fällen Ergebnisse ungleich 1 zu liefern.

Naja, die Funktionen sind ja auch periodisch.

> Wenn immer 1 rauskommt, ist was anderes faul.

Interessant wird das vor allem, weil angeblich beide 1 rausbekommen. Es 
gibt keinen Winkel, dessen Sinus und Kosinus beide 1 sind. Ich hätte 
gesagt, daß da vielleicht das Ergebnis in einem Integer gespeichert 
wird, aber so wie das oben geschrieben ist, kann das auch nicht sein.

von Uwe N. (ulegan)


Lesenswert?

Vermutlich ist aus irgendwelchen Gründen die Fliesskomma-Bibliothek 
nicht gelinkt.

von micha (Gast)


Lesenswert?

am anfang habe ich die variable als unsigned char
dann als float und auch als double aber es ist immer noch sin 1
und cos 1
wenn ich die formel
x = d*sin(winkel) + startpunkt habe und dann die variable winkel
von 0 bis 100 laufen lasse dann müssen da verschiedne werte rauskommen
wenn ich die werte mit taschenrechnner berechnne dann und die dan 
eingebe als feste konstanten dann ist alles io
frage ist wo finde ich die funktionen sin und cos
in der math.h ist nur der verweiss auf eine externe funktion

von Christoph _. (chris)


Lesenswert?

> Es gibt keinen Winkel, dessen Sinus und Kosinus beide 1 sind.

In den reellen Zahlen gibt es das tatsaechlich nicht. Wenn aber ein 
float oder double so gross wird, dass x + delta == x ist fuer
0 <= delta < 2*M_PI, koennen bei sin(x) und cos(x) lustige Dinge 
passieren.
Wahrscheinlich kommt auch in diesem Fall nicht dasselbe heraus, aber man 
sollte nie vergessen, welche Tuecken Fliesskomma-Zahlen haben.

@micha: Nicht von 0 bis 100 laufen lassen, sondern von 0 bis 100 / 180 * 
M_PI. Wie oben erwaehnt wurde: Bogenmass, da macht es wenig Sinn Winkel 
ueber 2*M_PI anzugeben, weil dadurch nur die Genauigkeit in den Keller 
geht.

Zugegeben, bei 100 wird die Genauigkeit noch fuer einige 
Nachkommastellen fuer sin(100) und cos(100) ausreichen. Wenn da 1 
rauskommt, liegt das daran, was du mit dem Ergebnis anstellst, aber 
sicher nicht an den Funktionen sin oder cos. Mein Tipp waere 
Zwischenergebnisse ausgeben lassen, und wenn das nicht hilft Debugger 
anwerfen und die Berechnung damit Schritt fuer Schritt nachvollziehen. 
Irgendwo macht dein Code dein Ergebnis kaputt, denn sin und cos 
funktioniert entweder ganz oder gar nicht (korrekte Winkel und Einbinden 
von <math.h> vorausgesetzt (bzw. <cmath>, falls du in C++ 
programmierst)).

von Uwe N. (ulegan)


Lesenswert?

Die Mathe-Lib muss im Makefile angegeben werden.
Verwendest du einfach WinAVR mit dem PN als IDE, muss im Makefile
1
MATH_LIB = -lm
stehen.
Verwendest du AVR-Studio, dann musst du unter
Project -> Configuration Options -> Libraries
die Datei libm.a mit 'Add Library-->' zu den zu linkenden Dateien 
hinzufügen.

Im Standard-WinAVR ist es automatisch drin, bei AVR-Studio nicht!

von Christoph _. (chris)


Lesenswert?

Wuerde sich ein Programm, das sin und cos benutzt, tatsaechlich linken 
lassen wenn die Math-lib nicht im Makefile steht?

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.