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.)
scheme
numbers
numeric-precision
python-3.x
Profpatsch
quelle
quelle
Antworten:
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).
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:
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:
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:
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.
quelle
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.
quelle