002
07.09.2008, 22:58 Uhr
Hans
Library Walker (Operator)
|
Hi,
das Problem, das Du da hast, hat damit zu tun, das sich gebrochene Zahlen im Rechner nicht exakt darstellen lassen. Das gilt für float, aber auch für double und long double. An diesen Stellen:
Code: |
Hallo ich bin: -0.0999999 <----- ??? Hallo ich bin: 7.45058e-08 <---- ???
|
schlagen die Rundungsfehler voll zu, die bei diesen Datentypen intern immer auftreten. Wenn Du -0.0999999 auf eine Nachkommastelle aufrundest, kommt -0.1 heraus, - der Wert liegt also noch im Rahmen dessen, was als korrekt durchgehen kann. 7.45058e-08 steht für 7.45058 mal 10 hoch -08. Hier kommt jetzt die Genauigkeit ins Spiel, mit der Zahlen dargestellt werden können. Bei float sind das rund 7 Stellen. xxxxxxe-8 bedeutet, dass das Komma um 8 Stellen nach links zu verschieben ist, um die richtige Zahl zu erhalten. Mit jedem Schritt, den das Komma dabei verschoben wird, fallen die Stellen rechts weg, und links muss einen Null ergänzt werden. Wenn man das 8 mal macht, bleibt Null übrig. Also, von 7.45058e-08 das Komma verschieben ergibt: 7.45058e-08 ohne verschieben 0.745058e-07 nach einmal verschieben 0.074506e-06 nach 2 mal verschieben 0.007451e-05 nach 3 mal verschieben 0.000745e-04 nach 4 mal verschieben 0.000075e-03 nach 5 mal verschieben 0.000007e-02 nach 6 mal verschieben 0.000000e-01 nach 7 mal verschieben 0.000000e-00 nach 8 mal verschieben Der Wert ist also Null, auch wenn es etwas kompliziert dargestellt ist. Wenn das alles nicht sofort klar wird, keine Sorge, das kommt schon noch.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 07.09.2008 um 23:02 Uhr von Hans editiert. |