2 回答
TA贡献1876条经验 获得超5个赞
问题是您的分布范围为 [0,1],然后将其乘以 9,得到范围 [0,9],然后加上 0.5,得到范围 [0.5, 9.5]。
不仅最后一个索引值有明显下降,第一个索引值也有不明显下降,因为每个桶只装了一半。
您是否考虑过简单地乘以 10 而不是 9
tmp := rnd * rnd * 10
然后在你的楼层中去掉+ 0.5?
index := int(math.Floor(tmp))
这会产生您所期望的分布,以下是循环达到 500,000 的一些结果:
[157949 65411 50239 42599 37637 33706 31200 28789 26927 25543]
[158302 65533 49712 42480 37347 33882 30987 28696 27225 25836]
[157824 65627 50432 42328 37307 33900 30787 29006 26975 25814]
TA贡献1802条经验 获得超6个赞
首先,您的 X 比例具有误导性,因为它从 1 开始并以 10 结束。应该是 0...9。
考虑到它会被修复,你的分布是完全正确的,尽管可能不是有意的(你真正想要什么?)。
您首先有一个介于 0 和 9 之间的分布,两者都包括在内。如果你加 0.5 然后向下取整,问问自己每个索引可以实际“获得”多少次点击?
答:大多数索引都得到一个“完整集”,其十进制值介于 1 和 2(或 6 和 7,或任何其他间隔)之间,四舍五入为 1(或 6,或任何索引)
除了
该边缘索引0和9只得到一个“半全套”。
因为您将索引 0...1偏移到 0.5...1.5 并向下舍入。对于 index=0,只有这个范围的一半将保留,即。0.5 到 1 之间的值(因为不再有 0 到 0.5 之间的值)。
与另一端相同。您将 8...9 偏移到 8.5...9.5,然后向下舍入。索引 9 仅获得 1/2,即。值在 9 到 9.5 之间。
图表的左端实际上比您可能预期的要低,尽管它不像右端那样可区分。
这些数字有时确实令人惊讶:-)。
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报