Sinus
-
Hallo zusammen!
Bin ein ziemlicher Neuling.Kann mir einer sagen, wieso ich mit der Funktion
double sin (double winkel);
für einen Winkel von 90°
0,89... herausbekomme und nicht 1?Das gleiche beim Cosinus. Wieso kommt da irgend ein Schrott raus?
-
Das Argument von sin() muss im Bogen- und nicht im Gradmaß angegeben werden:
x = pi * alpha/180°, d.h. in deinem Fall pi/2
-
Danke, daran hab ich nicht gedacht...
-
die sin-funktion arbeitet mit dem bogenmass.
willst du den winkel in grad angeben, muss du ihn umrechnen:
double bogenmass = (PI * grad) / 180;
double x = sin( bogenmass );edit: .
-
#include <iostream> #include <conio.h> #include <cmath> using namespace std; int main() { const long double PI = 3.1415926535897932384626433832795; long double grad, bogenmass, x; cout << "Winkel in Grad: "; cin >> grad; bogenmass = (PI * grad) / 180; x = sin( bogenmass ); cout << "Bogenmass: " << bogenmass/PI << " * PI" << endl; cout << "Sinus: " << x << endl; getch(); }
Bei 90° kommt die 1, aber bei 180° kommt leider nicht 0 als Resultat, sondern eine kleine Zahl. Wie kann man das eigentlich exakt berechnen?
-
Hi,
bei mir kommt folgende ausgabe:
%./test Winkel in Grad: 90 Bogenmass: 0.5 * PI Sinus: 1 %./test Winkel in Grad: 180 Bogenmass: 1 * PI Sinus: 1.22461e-16
Fuer pi hab ich die in der cmath definierte M_PI-Konstante genommen. Dennoch ist
die Ausgabe merkwuerdig. Laut meinem Calculator, muesste 0.054803665 sein. Warum
bekomme ich dann obige Ausgabe?mfg
v R
-
Erhard Henkes schrieb:
Bei 90° kommt die 1, aber bei 180° kommt leider nicht 0 als Resultat, sondern eine kleine Zahl. Wie kann man das eigentlich exakt berechnen?
wil bei 90° der Fehlereinfluss in der Bestimmung von Pi gegen 0(minimal) geht und bei 180° gegen 1(maximal)?
-
M_PI taugt nichts, ist 3.14159, das geht genauer:
const double PI = 3.141592654;
-
math.h:
#define M_PI 3.14159265358979323846
-
PI=2*asin(1);
-
und wer nur näherungswerte braucht der kann doch gleich mit ner festen umrechnungszahl rechnen da ein RAD = 57,29578 GRAD ist
das wäre dann sowas sin(30/57.29578lf) und ich bekomm auch ein relativ genauen wert raus 0.50000
bye
tt
-
Dass Computer nicht rechnen können, ist bereits weitgehend bekannt.
-
Erhard Henkes schrieb:
Dass Computer nicht rechnen können, ist bereits weitgehend bekannt.
und dies beweist was? das menschen nicht rechnen koennen? weil sie die computer bauen/programmieren/vom Schreibtisch schubsen? und dies beweist was? das Gott nicht rechnen kann... ouch... hihihi
-
b7f7 schrieb:
Erhard Henkes schrieb:
Dass Computer nicht rechnen können, ist bereits weitgehend bekannt.
und dies beweist was? das menschen nicht rechnen koennen? weil sie die computer bauen/programmieren/vom Schreibtisch schubsen? und dies beweist was? das Gott nicht rechnen kann... ouch... hihihi
falsch (oder flasch). es beweist, dass menschen dass und das nicht auseinander halten können.
sorry.
-
Fassen wir doch mal zusammen:
Selbst mit PI = 3.14159265358979323846 schaffen wir es mit einfachen C++-Mitteln nicht, als Resultat von sin(180°) eine saubere und glatte Null zu liefern. Das ist doch wirklich armselig (oder schreibt man das inzwischen "armseelig"?) und zeigt den Zustand heutiger Rechner und Software deutlich.Anmerkung: M_PI ist zwar in math.h bei Dev-C++ enthalten, aber nicht bei MSVC++6. Die genauere Zahl PI wird auf 3.1415926535898 abgeschnitten, wenn ich das im Debugger richtig sehe. Damit erhält man als sin(3.1415926535898 ) 1.2246063538224e-016. Mit "PI=2*asin(1);" verbessert sich die Situation kein Bisschen (früher: Bißchen).
Mit dem Calculator von MS Windows erhält man übrigens:
sin(3.1415926535898 ) = -6,7615373566167204971157727028368e-15Nimmt man den genaueren Wert wie in M_PI definiert, so findet man mit dem MS Calculator:
sin(3,14159265358979323846) = 2,6433832795028841970936031444713e-21
Also (fast) keine Chance mit normalen C++ Bordmitteln.
MS Calculator zeigt übrigens folgendes PI: 3,1415926535897932384626433832795
-
naja vielleicht haben computer bei "gewissen" floatingpoint operationen ein kleines darstellungsproblem
aber bei ganzzahlarithmetik sind sie ja wohl unschlagbar *gg*
bye
tt
-
Ganzzahlarithmetik? das endet doch auch ruckzuck irgendwo bei 10 ^ 18 (long long). Alles nicht überzeugend. Der Einsteiger ist hier umgehend auf Spezialbibliotheken angewiesen, die langsam und kompliziert sind.
-
das war auf die geschwindigkeit bezogen...nich auf die begrenzte größe und so langsam sind ja wohl die spezialbibliotheken auch nicht
bye
tt
-
TheTester schrieb:
und so langsam sind ja wohl die spezialbibliotheken auch nicht
Na also der Prozessor kann mit dem Typ "int" sicherlich 10-100 Mal so schnell rechnen wie mit einer Spezialbibliothek...
MfG SideWinder
-
das is mir schon klar...aber dieses langsam von erhard...das klang so nach nem richtigen total unglaublich langsam
bye