sin(pi) oder cos(0.5*pi) != 0
-
#define pi 3.14159265358979323846264
double x = cos(0.5*pi);
double y = sin(pi)wenn x/y muss als double definiert werden, dann sin(pi) oder cos(0.5*pi) != 0 !!!
hat jemand eine Idee? dank vorher!
-
Rundungsfehler treten auf, wenn man gerundete Zahlen verwendet. Pi ist bei dir eine gerundete irrationale Zahl.
Wenn eine Zahl in binärer Notation periodisch wird, dann wird's auch die double-Repräsentation.
Aus beidem kannst du ableiten, daß eine low level library, wie die in math.h deklarierte, nur runde Werte liefern kann.
So, das war's.
-
Vielleicht noch als Ergänzung: http://c-faq.com/fp/index.html (speziell http://c-faq.com/fp/fpequal.html)
-
Mmmmmmmmmm.
Epsilon.Na ja, von scheinbar einfachen Fragen kann man ganz schön weit kommen.
-
danke schön!
double a, b;
a = (fabs(cos(t))<1e-015) ? 0.0 : cos(0.5*pi);
b = (fabs(sin(t))<1e-015) ? 0.0 : sin(pi);oder DBL_EPSILON = 2.2204460492503131e-016
-
Habt Ihr auch FFT für large number geschrieben?
die Genauigkeit ist immer noch das Problem...
-
damo schrieb:
#define pi 3.14159265358979323846264
double x = cos(0.5*pi);
double y = sin(pi)besonders doof ist auch: wenn man beide werte mit printf ausgibt, sieht man zwei mal 0.000000. trotzdem ist x != y != 0. die gesetze der mathematik gelten nun mal nicht bei fliesskommazahlen.