y = 35675640
z = (1682*x*y4 + 3*x3 + 29*x*y2 - 2*x5 + 832)
/ 107751
Für die folgenden Untersuchungen vereinfachen wir diese Gleichung zu:
z = (A + B + C - D + 832) / 107751
(0 + 832) / 107751 = 7.72150605916976929E-03.
Beide Resultate sind falsch!
Das zweite Resultat entspricht abgesehen von der Stellenanzahl
dem Ergebnis des Taschenrechners.
Es zeigt sich, daß mit einfacher Genauigkeit kein richtiges
Ergebnis erzielt werden kann.
Besondere Kritik verdient dabei die Tatsache, daß das System den User nicht warnt - und selbst bei einem Overflow die Gesamtrechnung nicht abbricht. Ein Abbruch erfolgt nur, wenn das Ergebnis der jeweils abgeschlossenen Berechnung die maximale Grenze von 3.40282E+38 überschreitet. Achtung: Die in der Rechnung verdeckt auftretenden Overflows werden ignoriert, wenn das Endergebnis im darstellbaren Zahlenbereich liegt ! |
Glieder des Zählers | Resultat |
---|---|
A+B+C | 5.23460426438903577E+41 |
D | 5.23460426438903577E+41 |
Endresultat: (0 + 832) / 107751 = 7.72150606490891022E-03
Das Resultat ist falsch!
Das Resultat entspricht abgesehen von der Stellenanzahl dem
Ergebnis des Taschenrechners.
Es zeigt sich, daß C auch bei double precision kein richtiges
Ergebnis zu liefern imstande ist !