Abstract
Wie wahrscheinlich ist es, dass die Summe von gerundeten Werten nicht gleich ihrer gerundeten Summe ist?
Für zwei zufällige Gleitkommazahlen ist dies klar: die Wahrscheinlichkeit liegt bei etwa 25% - das ist der Rot-Anteil an der Gesamtfläche:
Aber etwas überraschend mag sein, dass die Wahrscheinlichkeit sich 90% nähert, je mehr Zahlen gerundet und addiert werden:
Bei sieben zufälligen Gleitkommazahlen ist die Wahrscheinlichkeit bereits größer als 50%, dass die Summe ihrer gerundeten Werten nicht gleich ihrer gerundeten Summe ist.
Wie kann man diese Problematik lösen? Verwenden Sie RoundToSum.
Gerundete Prozentanteile
Gerundete Prozentanteile ergeben addiert auch häufig nicht 100%.
Bei zwei zufälligen Zahlen ist es noch kein Problem:
Aber bei mehr Zahlen stellt sich dasselbe Problem wie eingangs erwähnt, nur mit einer Zahl mehr. Gerundete Prozentanteile von drei zufälligen Zahlen ergeben in etwa 25% der Fälle keine Summe von 1:
Hier ist bei acht Zufallszahlen die Wahrscheinlichkeit größer als 50%, dass ihre gerundeten Prozentanteile zusammen nicht 1 ergeben.
Auch hier kann man mit RoundToSum das Problem beheben.
Literatur
Diaconis, P., & Freedman, D. (2007, July 13). (Externer Link!) On Rounding Percentages.
Frederick Mosteller, Cleo Youtz, Douglas Zahn (Demography, 1969, 4, 850-858). The Distribution of Sums of Rounded Percentages.
Anwendungsbeispiel
Herber (Externer Link!) Eine Ganze Zahl auf 12 Monate prozentuell aufteilen
Appendix – Die Monte Carlo Programme
Bitte den Haftungsausschluss im Impressum beachten.
Option Explicit
Const n = 100
Const runs = 20000
Const bOnlyPositive = True 'Without loss of generality
Sub monte_carlo_add_rounded_values()
'Calculates for 2 to n how likely it is
'that rounding would not alter their sum.
'Example: for 2 numbers there is a 25% chance
'that the sum of their rounded values is not
'equal to their rounded sum.
'Source (EN): https://www.sulprobil.com/rounding_values_alters_their_sum_en/
'Source (DE): https://www.bplumhoff.de/werte_runden_aendert_ihre_summe_de/
'(C) (P) by Bernd Plumhoff 16-Dec-2023 PB V0.3
Dim i As Long
Dim j As Long
Dim k As Long
Dim m As Long
Dim d As Double
Dim s1 As Double
Dim s2 As Double
With Application.WorksheetFunction
Randomize
For i = 2 To n
m = 0
For j = 1 To runs
s1 = 0#
s2 = 0#
For k = 1 To i
If bOnlyPositive Then
d = Rnd()
Else
d = 2# * Rnd() - 1#
End If
s1 = s1 + d
s2 = s2 + .Round(d, 0)
Next k
s1 = .Round(s1, 0)
If s1 <> s2 Then
m = m + 1
End If
Next j
Cells(i, 1) = i
Cells(i, 2) = m / runs
Next i
End With
End Sub
Sub monte_carlo_percentage_sum_of_rounded_values()
'Calculates for 2 to n how likely it is that
'rounding would not alter their percentage sum.
'Example: for 2 numbers there is a 25% chance
'that the sum of their rounded values is not
'equal to their rounded sum.
'Source (EN): https://www.sulprobil.com/rounding_values_alters_their_sum_en/
'Source (DE): https://www.bplumhoff.de/werte_runden_aendert_ihre_summe_de/
'(C) (P) by Bernd Plumhoff 16-Dec-2023 PB V0.2
Dim i As Long
Dim j As Long
Dim k As Long
Dim m As Long
Dim s1 As Double
Dim s2 As Double
With Application.WorksheetFunction
Randomize
For i = 2 To n
m = 0
ReDim e(1 To i) As Double
For j = 1 To runs
s1 = 0#
For k = 1 To i
If bOnlyPositive Then
e(k) = Rnd()
Else
e(k) = 2# * Rnd() - 1#
End If
s1 = s1 + e(k)
Next k
s2 = 0#
For k = 1 To i
e(k) = .Round(1000# * e(k) / s1, 0)
s2 = s2 + e(k)
Next k
If s2 <> 1000# Then
m = m + 1
End If
Next j
Cells(i, 1) = i
Cells(i, 2) = m / runs
Next i
End With
End Sub
Download
Bitte den Haftungsausschluss im Impressum beachten.
How_likely_does_rounding_values_alter_their_rounded_sum.xlsm [43 KB Excel Datei, ohne jegliche Gewährleistung]