Hallo,
ich bastel jetzt schon seit Tagen an einem Algorithmus der analytisch die Nullstellen eines Polynoms 4.Ordnung bestimmen soll. Leider finde ich immer wieder Eingangsparameter, bei denen der Algorithmus versagt. Genauer gesagt, ist es glaub ich die begrenzte Rechengenauigkeit von c++ denn im Matlab funktioniert der Algoritmus problemlos, was seltsam ist, denn ich benutze für mein C++ Programm long double während matlab nur mit double rechen kann.
Was mir auch Rätsel aufgibt ist folgendes Beispiel:
Als text ausgabe erhalte ich:
Eigentlich sollte dort 40.02 rauskommen :suspekt:
Meine Frage ist: was macht c++ intern mit den Zahlen und was kommt zur Anzeige denn hier gibt es eine eindeutige Diskrepanz die ich nicht verstehe.
Alle beteiligten Variablen sind long double und die die anzuzeigenden dezimalstellen wurden von mir vorsichtshalber mit setprecision(30) so eingestellt, dass er mir sämtliche Stellen anzeigen sollte.
Achja, das Ergebnis sollte eigentlich 40 sein, mit 40.006 liefert c++ einen sehr ungenauen Wert.
Wäre äußerst nett, wenn mir jemand weiterhelfen könnte oder eine Idee hat, ich verzweifel langsam an diesem Problem.
Also, besten Dank im Voraus
Gruß
Kristian
ich bastel jetzt schon seit Tagen an einem Algorithmus der analytisch die Nullstellen eines Polynoms 4.Ordnung bestimmen soll. Leider finde ich immer wieder Eingangsparameter, bei denen der Algorithmus versagt. Genauer gesagt, ist es glaub ich die begrenzte Rechengenauigkeit von c++ denn im Matlab funktioniert der Algoritmus problemlos, was seltsam ist, denn ich benutze für mein C++ Programm long double während matlab nur mit double rechen kann.
Was mir auch Rätsel aufgibt ist folgendes Beispiel:
Code:
cout<<-B/(4*A)<<"+"<<s*W/2<<endl;
L=-B/(4*A)+s*W/2;
Als text ausgabe erhalte ich:
HTML:
-110632887428297.89+110632887428337.91
40.006141662597656
Eigentlich sollte dort 40.02 rauskommen :suspekt:
Meine Frage ist: was macht c++ intern mit den Zahlen und was kommt zur Anzeige denn hier gibt es eine eindeutige Diskrepanz die ich nicht verstehe.
Alle beteiligten Variablen sind long double und die die anzuzeigenden dezimalstellen wurden von mir vorsichtshalber mit setprecision(30) so eingestellt, dass er mir sämtliche Stellen anzeigen sollte.
Achja, das Ergebnis sollte eigentlich 40 sein, mit 40.006 liefert c++ einen sehr ungenauen Wert.
Wäre äußerst nett, wenn mir jemand weiterhelfen könnte oder eine Idee hat, ich verzweifel langsam an diesem Problem.
Also, besten Dank im Voraus
Gruß
Kristian