Warum runden einige Sprachen auf die nächste EVEN-Ganzzahl ab?

44

Programmiersprachen wie Schema (R5RS) und Python ( siehe diese Frage ) runden auf die nächste gerade Ganzzahl ab, wenn der Wert genau zwischen den umgebenden Ganzzahlen liegt.

Was ist die Begründung dafür?
Gibt es eine mathematische Idee, die es einfacher macht, über folgende Berechnungen nachzudenken?

(R5RS verweist auf den IEEE-Gleitkommastandard als Quelle für dieses Verhalten.)

Profpatsch
quelle
4
Hast du floating-point-gui.de gelesen ?
Basile Starynkevitch
1
IEEE ermöglicht den Mehrfachrundungsmodus. Das ist einer von ihnen. In einigen Sprachen ist es sogar möglich, den Rundungsmodus während der Ausführung zu ändern.
Tobias Brandt
5
Vielleicht möchten Sie den Abschnitt " Tie-Breaking" lesen , um auf Wikipedia zu runden, und die Gründe für die Assoziationen, die hinter jedem einzelnen stehen.
1
"obwohl genau ist eine frage der diskussion mit fließkommazahlen" Es ist keine frage der diskussion, es ist sehr genau angegeben. Beispielsweise können die hier relevanten Zahlen (wie 42.5) exakt dargestellt werden, da es sich um binäre Brüche handelt. Was nicht genau dargestellt werden kann, sind andere Brüche als binäre Brüche, einschließlich Dezimalbrüche.
Svick

Antworten:

39

Vor einiger Zeit habe ich ein Testprogramm für die sukzessive Rundung erstellt, da es sich im Grunde genommen um einen Stresstest im schlimmsten Fall für einen Rundungsalgorithmus handelt.

Für jede Zahl von 0 bis 9.999 wird zuerst auf die nächsten 10, dann auf die nächsten 100 und dann auf die nächsten 1000 gerundet zu 2, dann zu 1.) Diese Zahlenmenge hat einen Mittelwert von 4999,5.

Wenn alle drei Abrundungen getan werden , um die Methode „rund die Hälfte nach oben“ verwendet wird , dann werden die Ergebnisse sind wie folgt (erste Säule ist das Rundungsergebnis, zweite Spalte ist , wie viele Zahlen zu diesem Ergebnis gerundet - dh es ist ein Histogramm).

0     445
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 555

Das Ergebnis unterscheidet sich von einer einzelnen "Aufrundung" bis zum nächsten Tausendfünfzigstel von 10.000 und der durchschnittliche gerundete Wert beträgt 5055 (55,5 mehr als der ursprüngliche Durchschnitt).

Wenn alle drei Runden durch "Halbieren" ausgeführt werden, sind die Ergebnisse:

0     556
1000  1000
2000  1000
3000  1000
4000  1000
5000  1000
6000  1000
7000  1000
8000  1000
9000  1000
10000 444

Das Ergebnis unterscheidet sich von einer einzelnen "halben Runde" bis zum nächsten Tausendfünfzigstel von 10.000 und der und der durchschnittliche gerundete Wert ist 4944 (zu niedrig um 55,5).

Wenn alle drei Runden mit "rund halb ungerade" durchgeführt werden, ist das Ergebnis:

0     445
1000  1111
2000  889
3000  1111
4000  889
5000  1111
6000  889
7000  1111
8000  889
9000  1111
10000 444

Das Ergebnis unterscheidet sich von einer einzelnen "halben Ungerade" bis zum nächsten Tausendfünfzigstel von 10.000, und der durchschnittliche gerundete Wert beträgt 4999,5 (richtig).

Wenn alle drei Rundungen mit "round half even" durchgeführt werden, sind die Ergebnisse:

0     546
1000  909
2000  1091
3000  909
4000  1091
5000  909
6000  1091
7000  909
8000  1091
9000  909
10000 1091

Das Ergebnis unterscheidet sich von einer einzelnen "geraden Hälfte" bis zum nächsten 450- fachen von 10.000 und der durchschnittliche gerundete Wert beträgt 4999,5 (richtig).

Ich denke, dass es offensichtlich ist, dass die gerundeten Werte durch Auf- und Abrunden halbiert werden, so dass der Durchschnitt der gerundeten Werte nicht mehr dieselbe Erwartung hat wie der Durchschnitt der ursprünglichen Werte, und dass "runde Hälfte gerade" und "runde Hälfte ungerade" "Entfernen Sie die Verzerrung, indem Sie die eine Hälfte der Zeit und die andere Hälfte der Zeit behandeln. Aufeinanderfolgende Rundungen multiplizieren die Verzerrung.

Runde, halbe, gerade und runde, halbe, ungerade geben der Verteilung eine eigene Tendenz: eine Tendenz zu geraden bzw. ungeraden Ziffern. In beiden Fällen wird diese Verzerrung wiederum mit der sukzessiven Rundung multipliziert, für die halbe Quote ist sie jedoch schlechter. Ich denke, dass die Erklärung in diesem Fall einfach ist: 5 ist eine ungerade Zahl, so dass die runde Hälfte ungerade mehr Ergebnisse liefert, die mit 5 enden als die runde Hälfte gerade - und daher mehr Ergebnisse, die bei der nächsten Rundung speziell behandelt werden müssen .

Auf jeden Fall sind von den vier Auswahlmöglichkeiten nur zwei unbefangen, und von den beiden unbefangenen Auswahlmöglichkeiten ergibt die halbe Runde sogar die bestmögliche Verteilung, wenn sie wiederholt gerundet wird.

hobbs
quelle
55

Es heißt Bankerrundung. Die Idee ist, den kumulativen Fehler aus vielen Rundungsoperationen zu minimieren.

Nehmen wir an, Sie haben immer 0,5 abgerundet. Denken Sie an all die kleinen Zinszahlungen, bei denen die Bank jedes Mal einen halben Cent einsteckt ...

Nehmen wir an, Sie haben immer 0,5 aufgerundet. Die Buchhaltung wird schreien, weil Sie mehr Zinsen auszahlen, als Sie sollten.

Loren Pechtel
quelle
6
aber warum gerade und nicht ungerade?
Ratschenfreak
17
@ratchetfreak - so kleine Zahlen runden auf, nicht von, Null entfernt. Davon abgesehen ist es willkürlich - muss etwas sein.
Jonathan Dursi
15
@ratchetfreak: Was würde passieren, wenn Sie mit der Zahl 1 beginnen, durch 2 teilen und auf ungerade runden? Sie erhalten 0,5 auf 1 gerundet. Was ist, wenn Sie erneut durch 2 dividieren? Sie erhalten 0,5 auf 1 gerundet. Und so weiter. Wird niemals Null.
gnasher729
13
Ich denke, gerade Zahlen sind auch ungeraden Zahlen vorzuziehen, weil sie die Wahrscheinlichkeit für die Notwendigkeit nachfolgender Rundungsdilemmata verringern. Die Division durch (genau) zwei ist in der Praxis eine häufige Operation.
Marc van Leeuwen
4
Das ist auch in der Statistik wichtig. Wenn jeder Bruchteil eines Datensatzes aufgerundet wird, sind beschreibende Statistiken wie der Mittelwert (geringfügig) höher als wenn er abgerundet ist. In der Einführung in die Epidemiologie von Kenneth Rothman wird ausdrücklich erwähnt, dass das Runden des Endes .5 (oder .005 oder was auch immer) eine Datenbank allmählich auf höhere Zahlen ausrichtet, das Runden auf eine gerade oder ungerade Zahl jedoch den Durchschnitt nicht beeinflusst.
Will Murphy