Moin!
//EDIT: Hat sich erledigt. Aufgabenstellung war sehr missverständlich formuliert.
Es geht darum, dass sich akkumulierende Rundungsfehler bei Rechnungen mit Double-Datentyp zu starke Abweichungen vom eigentlichen Ergebnis führen können. Das soll an folgender Aufgabe gezeigt/ausprobiert werden.
Folgender Wert soll berechnet werden:
Laut Autor soll bei der Rechnung übrigens 8779 rauskommen, aber selbst das bekomme ich per Taschenrechner nicht hin (--> 6.333). Liegt wohl daran, dass auch der Taschenrechner Rundungsfehler liefert...?
Das hier ist die Lösung des Autors:
Frage 1:
Wieso belegt er x mit der Range vom Integer?
Frage 2:
Woher stammt der Wert von y? (35675640?!)
Frage 3:
Wie kommt er in der Zeile
z = x*yh2*(1682*yh2+29)/107751 + xh2*x*(3-2*xh2)/107751 + 832/107751;
auf die Werte, die ich hier dick markiert habe?
Das macht für mich irgendwie überhaupt keinen Sinn... oder ich verfehle ich die Message, die der Autor hier überbringen will.
Danke für's Lesen. Ich seh hier vor lauter Bäumen den Wald nicht mehr.
//EDIT: Hat sich erledigt. Aufgabenstellung war sehr missverständlich formuliert.
Es geht darum, dass sich akkumulierende Rundungsfehler bei Rechnungen mit Double-Datentyp zu starke Abweichungen vom eigentlichen Ergebnis führen können. Das soll an folgender Aufgabe gezeigt/ausprobiert werden.
Folgender Wert soll berechnet werden:
Java:
x1y1 + x2y2 + x3y3 + x4y4 + x5y5 + x6y6
für
x1 = 10^20 , x2 = 1223 , x3 = 10^28 , x4 = 10^15 , x5 = 3 , x6 = -10^12
y1 = 10^20 , y2 = 2 , y3 = -10^22 , y4 = 10^13 , y5= 2111 , y6 = 10^16
Das hier ist die Lösung des Autors:
Java:
public class Neu {
public static void main (String[] args) {
double s, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
x1 = 1e20;
x2 = 1223;
x3 = 1e18;
x4 = 1e15;
x5 = 3;
x6 = -1e12;
y1 = 1e20;
y2 = 2;
y3 = -1e22;
y4 = 1e13;
y5 = 2111;
y6 = 1e16;
s = x1*y1 + x2*y2 + x3*y3 + x4*y4 + x5*y5 + x6*y6;
System.out.println("s = " + s);
double x, y, xh2, yh2, z;
x = 192119201;
y = 35675640;
xh2 = x*x;
yh2 = y*y;
z = (1682*x*yh2*yh2 + 3*xh2*x + 29*x*yh2 - 2*xh2*xh2*x + 832) / 107751;
System.out.println("Variante 1: z = " + z);
z = x*yh2*(1682*yh2+29)/107751 + xh2*x*(3-2*xh2)/107751 + 832/107751;
System.out.println("Variante 2: z = " + z);
}
}
Wieso belegt er x mit der Range vom Integer?
Frage 2:
Woher stammt der Wert von y? (35675640?!)
Frage 3:
Wie kommt er in der Zeile
z = x*yh2*(1682*yh2+29)/107751 + xh2*x*(3-2*xh2)/107751 + 832/107751;
auf die Werte, die ich hier dick markiert habe?
Das macht für mich irgendwie überhaupt keinen Sinn... oder ich verfehle ich die Message, die der Autor hier überbringen will.
Danke für's Lesen. Ich seh hier vor lauter Bäumen den Wald nicht mehr.
Zuletzt bearbeitet: