内容
既存の公式では、大きく値にずれが生じます。
そこで、以下のような検証を行ってみました。
- 0.1刻みで0〜500までの値xを作成 (平均250)
- 上記の値xに対してfloor(x), round(x), ceil(x)をかける
- 上記の3つの関数の平均を求める
結果
すると、以下のような結果が出ました。
関数 |
平均値 |
floor(x) |
49.55045 |
round(x) |
50.04995 |
ceil(x) |
50.44955 |
証明
すなわち、以下のような結果が出ます。
- 納n=0, 1000](floor(x/10))/100≒納n=0, 1000](x/10)/100-0.5
- 納n=0, 1000](round(x/10))/100≒納n=0, 1000](x/10)/100
- 納n=0, 1000](ceil(x/10))/100≒納n=0, 1000](x/10)/100+0.5
結論
ダイス関数において小数操作関数を使う場合、平均値を求める際は以下の補正値を加える。
floor(x)⇒-0.5
round(x)⇒0
ceil(x)⇒+0.5
最終結論
E(pDs)=(p*s+p)/2=p(s+1)/2
E(floor(pDs*c))≒E(pDs)-0.5=p(s+1)/2*c-0.5
E(round(pDs*c))≒E(pDs)=p(s+1)/2*c
E(ceil(pDs*c))≒E(pDs)+0.5=p(s+1)/2*c+0.5
(c:小数を含む定数)
| |
|