bin ich zu blöd?
-
double number = DBL_MAX; while ( number == DBL_MAX ) number = number - 1000;Warum bricht die Schleife nicht ab?

-
Was ist DBL_MAX?
-
der maximalwert von double.
-
Das passiert, wenn DBL_MAX == INF oder DBL_MAX == -INF.
-
Bei einer Zahl mit über 300 Stellen sind auch bei doppelte Genauigkeit die letzten 3 Stellen NIX.
-
d00f schrieb:
double number = DBL_MAX; while ( number == DBL_MAX ) number = number - 1000;Warum bricht die Schleife nicht ab?

Weil die Darstelloung von doubles nur endlich viele Mantissenstellen hat. Und DBL_MAX hat einen so hohen Exponenten, dass 1000 weit jenseits der letzten dargestellten Mantissenstelle ist. Das heißt,
1.00000000000000000000 (..., nicht darstellbare stellen) * 10^37 - 1000
= 1.00000000000000000000 * 10^37 - 0.000000000000000000000 (irgendwo hinten steht die 1 von der 1000) * 10^37
= 1.00000000000000000000 * 10^37 = DBL_MAXZum Titel des Threads lies dir bitte mal den Link in meiner Signatur durch. Danke.
-
Was? Das kapier ich nicht.
Der Ausdruck "number == DBL_MAX" kann doch nicht immer true sein, wenn man von number immer wieder 1000 abzieht, DBL_MAX aber gleich bleibt.
-
pumuckl schrieb:
Zum Titel des Threads lies dir bitte mal den Link in meiner Signatur durch.
Sieht so aus als wär der schon ganz gut gewählt. Nur ein ! statt ? wäre passender gewesen.
Du hast schon eine gute Erklärung bekommen. Vielleicht mal in Ruhe durchlesen und drüber nachdenken. Bei der begrenzten Genauigkeit von double führt bei einer riesigen Zahl wie 1.7e308 (17 mit 307 nullen dran) eine Subtraktion mit einer unglaublich winzigen Zahl wie 1000 zu keiner Änderung.
Nimm dir doch mal einen Block Papier und schreib das auf.
-
Achso, jetzt kapier ich es.
Aber wie passen 307 Nullen in 8 Bytes?
-
Jein schrieb:
Achso, jetzt kapier ich es.
Aber wie passen 307 Nullen in 8 Bytes?Ungefähr so:
"eine1mit307nullen"
Ok, sind zu viele Bytes.Vielleicht so:
"1e307"
Ja, paßt mit nur 6 Bytes. Das 'e' steht für "mal 10 hoch".Aber man kann sich andere Formate einfallen lassen, die von der Maschine schneller verarbeitet werden können.
http://de.wikipedia.org/wiki/Gleitkommazahl