gleitpunkttypen < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:37 Mo 12.04.2010 | Autor: | max_e |
hallo,
folgende angabe ist gegeben
double a=1.e-7,b=2.e7,c=1.e7,d=1.e7;
double z;
z=(a+b-c-c)/a;
nun wenn ichs im taschenrechner eingebe bekomme ich logisch als ergebnis die 1
jedoch in dieser form liefert der compiler mir 1,00583
nun tasche ich die summanten
z=(b-c-d+a)/a -'>compiler liefert die 1
wo liegt genau die problematik, etwa darin das wenn nicht identische variabeln im gleitkommabereich miteinander verrechnet werden sie in einem zuordnungsbereich liegen, oder wer kanns mir genauer erklären danke
|
|
|
|
Hallo!
Das ist ein typischer Rundungsfehler, der einfach durch die Beschränktheit der Genauigkeit sowie der Konversion zwischen Dezimal und Binärsystem entsteht.
Laß dir die einzelnen Werte doch mal ausgeben:
a=9.99999999999999955e-08
b=2.00000000000000000e+07
c=1.00000000000000000e+07
d=1.00000000000000000e+07
a+b=2.00000000000001006e+07 //Hier passierts
a+b-c=1.00000000000001006e+07
a+b-c-c1.00582838058471680e-07
Aber warum passiert das im zweiten Fall NICHT?
b-c =1.00000000000000000e+07
b-c-c=0.00000000000000000e+00
b-c-c+a=9.99999999999999955e-08
(b-c-c+a)/a=1.00000000000000000e+00
|
|
|
|