Forum: PC-Programmierung numerische Stabilität bei Summe und Division


von Maxim (maxim) Benutzerseite


Lesenswert?

Ich habe eine große Summe (bis zu einer Million Summanden), die am Ende 
auf die Anzahl der Summanden normiert wird. Ist es da besser die 
Division nach der Summation durchzuführen oder jeden Summand zuerst zu 
dividieren? Es geht um die Genauigkeit nicht um die Geschwindigkeit. Ach 
ja, jeder Summand liegt in [-1,1]. Eine Begründung wäre ebenfalls 
hilfreich. Danke.

von Nicolas S. (Gast)


Lesenswert?

Maxim S. schrieb:
> Ich habe eine große Summe (bis zu einer Million Summanden)

Also eine überschaubare Menge....

Tut mir leid, die Frage ist gar nicht so einfach wie sie klingt. Es 
hängt von den Zahlen (Wertebereich, Verteilung) und ihrer Darstellung 
(double, float, fix point ...) ab.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Maxim S. schrieb:
> Ist es da besser die Division nach der Summation durchzuführen oder
> jeden Summand zuerst zu dividieren?

Wenn du ein passendes Zahlenformat hast (z.B. BigDecimal in Java) dann 
erst Addieren und dann dividieren.

Begründung: Addition ist "verlustlos", Division hat ggf. Rundungsfehler 
(z.B. endlose Periode  in Binärrepresentation).

von der mechatroniker (Gast)


Lesenswert?

Bei Gleitkommazahlen dürfte der ausschlaggebendere Faktor für die 
Genauigkeit des Ergebnisses sein, ob man "linear" oder "baumförmig" 
addiert.

Bei Festkomma ist das natürlich egal (sofern man keine Teilsummen 
umskaliert), dafür schmeißt man natürlich einiges weg, wenn man erst 
dividiert

von Josef (Gast)


Lesenswert?

Nicht einmal die Summation ist einfach wenn es auf Praezision
ankommt.
Ein Startpunkt waere 
http://en.wikipedia.org/wiki/Kahan_summation_algorithm .

Wie genau sind deine Zahle, positiv, negativ, durch was wird 
dividiert,...?

Gruss

von (prx) A. K. (prx)


Lesenswert?

Josef schrieb:
> Nicht einmal die Summation ist einfach wenn es auf Praezision
> ankommt.

Wenn man sich an Läubis Tipp hält schon. Nur war in der Aufgabe dieser 
Lösungsansatz vermutlich nicht gemeint. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.