PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sin(45.0f) == 0.85???


Ganon
2003-10-22, 19:51:31
Hi,

ich habe hier ein kleines Problem! Wenn ich z.B. cout << sin(45.0f) schreibe, dann kommt als Ergebis etwas mit 0.85xxx raus!

Sollte da nicht etwas mit 0.707xxx rauskommen?

Z.B. kommt bei folgendem Code:

#include <iostream>
#include <math.h>

int main ()
{
std::cout << sin(45.0f) << std::endl;
return 0;
}


0.850904 als anzeige raus! Mein Taschenrechner sagt aber: 0,7071067812590626

Kann mir das mal einer erklären, oder habe ich etwas nicht kapiert?

Danke!

Demirug
2003-10-22, 20:15:32
Computer arbeiten mit dem Bogenmaß und nicht mit Grad. 360° entsprechen dabei 2*Pi. Um also Grad in das Bogenmaß zu konvertieren muss man mit Pi/180 multiplizieren.

Ganon
2003-10-22, 21:50:05
Vielen Dank! Auf so etwas muss man erst mal kommen! *ggg*

Gast
2003-10-22, 22:32:00
Original geschrieben von Demirug
Computer arbeiten mit dem Bogenmaß und nicht mit Grad. 360° entsprechen dabei 2*Pi. Um also Grad in das Bogenmaß zu konvertieren muss man mit Pi/180 multiplizieren.

Warum eigentlich?? Grad brauch man doch viel öfter, oder?

Demirug
2003-10-22, 22:47:07
Original geschrieben von Gast
Warum eigentlich?? Grad brauch man doch viel öfter, oder?

Im Altagsgebrauch ja. Im physikalisch wissenschaftlichen Umfeld benutzt man aber normalerweise das Bogenmaß (Radian). Das kommt daher weil in der Physik ein Winkel wie folgt definiert wird:

Ein Winkel ist das Verhältnis aus der Bogenlänge
zwischen den beiden (Halb-) Geraden und dem Radius
des Kreises:

Winkel = b/r

Da der Kreisumfang ja 2*r*PI entspricht die Bogenlänge im Einheitskreis (r=1) 2Pi weil 2*1*PI = 2PI.

Vedek Bareil
2003-10-23, 00:32:00
ganz besonders witzig wird es ja erst dadurch, daß man unter OpenGL bei Drehungs-Funktionen wie glRotatef das Winkelargument dann wieder in Grad angeben muß :D

micki
2003-10-23, 09:04:34
vielleicht liegt das ganze auch daran wie der sinus berechnet wird, dass man das, als es noch per hand gemacht werden mußte, lieber in rad machte... in grad kommt total der mißt raus :D


float x = 45;
float sw = x - x*x*x/(1.f+2.f+3.f) + x*x*x*x*x/(1.f+2.f+3.f+4.f+5.f) - x*x*x*x*x*x*x/(1.f+2.f+3.f+4.f+5.f+6.f+7.f);
x = 3.14159f/4.f;
float sb = x - x*x*x/(1.f+2.f+3.f) + x*x*x*x*x/(1.f+2.f+3.f+4.f+5.f) - x*x*x*x*x*x*x/(1.f+2.f+3.f+4.f+5.f+6.f+7.f) + x*x*x*x*x*x*x*x*x/(1.f+2.f+3.f+4.f+5.f+6.f+7.f+8.f+9.f);
float s = sinf(x);


gruesse
micki

Gnafoo
2003-10-23, 14:46:12
Übrigens kann man das bei den meisten Taschenrechnern
irgendwie auch umstellen ..

cu DerTod