komisches verhalten von long double
-
hallo,
ich hatte vor zur übung ein Programm zu schreiben, was mir die Wurzel einer bestimmten Zahl ausrechnet. Angefangen habe ich mit folgendem Code:long double x=1; long double wurzel; while(true) { x=x+0.00000001; wurzel=x*x; if(wurzel>2) { cout.precision(16); cout<<x; break; } }Mit dieser Schleife bekomme ich also eine zahl, die etwas größer ist als die Wurzel von 2.
Als Ausgabe bekomme ich 1.414213570002031Wenn ich jetzt aber den Code ein wenig abändere, indem ich x nicht mit 1 sondern mit 0 initialisiere
long double x=0;bekomme ich auf einmal eine andere Ausgabe (1.414213570001593).
Hat jemand eine Idee, woran das liegen könnte?
-
Ohne den Code anzuschauen, wahrscheinlich einfach damit, dass
long doubleeine Gleitkommazahl ist. Gleitkommazahlen sind nicht genau, sondern weisen Abweichungen auf. Am besten mal den Wikipedia-Artikel lesen:
http://de.wikipedia.org/wiki/GleitkommazahlGrüssli
-
ausserdem schreibst du ja
wurzel > 2
schreib mal
wurzel >= 2
-
Es ist äußerst unwahrscheinlich, dass sich dadurch etwas ändert.
-
Wenn ich statt "<" "<=" verwende ändert dies am Ergebnis nichts
-
g3bk47 schrieb:
Wenn ich statt "<" "<=" verwende ändert dies am Ergebnis nichts
Ich kann nur auf Dravere verweisen und nochmal den Wikipedia Link:
http://de.wikipedia.org/wiki/Gleitkommazahl.