誤差之源,小數的肆捨伍入?

2022/02/22閱讀時間約 1 分鐘
券商的手續費怎麼取整數,是依
1. 單筆價量總金額先行計算,後在四捨五入
2. 依逐筆成交價金額,乘以手續費,先四捨五入,後以總量相乘計算
以券商立場,方案1、2,何者有利 ?
回答此問題,莫過於亂數模擬求解 !
問題設計如下
A. 依均勻分布模式,產生n筆帶有小數的數字,n=2、3、4...
B1 . n筆數字先加總,後四捨伍入
B2. n筆數字個別先四捨五入,後加總
C. 紀錄B1、B2的大小結果
D. 重複A、B、C步驟數萬次,統計其結果 !
程式碼提供如下,結論是兩者差異不大,但是小心被上下其手,例如手續費計算的規則會悄悄變成Max(B1,B2),這隱含有超過55%的機率,多收一點點而又不被發覺的手續費收入 !
Public Sub SumRound()
Dim ii, x(1 To 100), y, z, u, v, sumA, sumB As Variant
u = 0
v = 0
y = 10 '筆數
For z = 1 To 100000 '迴圈次數
'B1. y筆數字先加總,後四捨伍入
sumA = 0
For ii = 1 To y
x(ii) = Rnd(1)
sumA = sumA + x(ii)
Next ii
sumA = Round(sumA, 0)
'B2. y筆數字個別先四捨五入,後加總
sumB = 0
For ii = 1 To y
x(ii) = Round(Rnd(1), 0)
sumB = sumB + x(ii)
Next ii
If sumA > sumB Then u = u + 1
If sumA < sumB Then v = v + 1
'Debug.Print z, ":", sumA, ",", sumB
Next z
Debug.Print u
Debug.Print v
End Sub
為什麼會看到廣告
    Piemann
    Piemann
    Piemann 只是一位中年大叔 !
    留言0
    查看全部
    發表第一個留言支持創作者!