Folia
← 返回头版

随机数模运算选择存在数学缺陷 专家建议采用显式概率分布

技术专家Austin Seipp通过分析指出,使用模运算符(r % n)来选择随机对象存在隐藏的数学缺陷1。这种常见做法无法保持底层均匀分布,导致不同选项被选中的概率不相等1。具体来说,从10个均匀分布的输入值中使用r % 3进行选择时,对象1被选中的概率为40%(4个输入),而对象2和3的概率各为30%(3个输入),而非预期的均等33%1。

为解决这一问题,Seipp建议采用更高级的API设计方法1。他推荐使用random_choice()函数接收离散选项及其对应的概率,并采用相对整数权重而非浮点数来实现加权随机选择,例如使用权重4、3、3而非0.4、0.3、0.31。Seipp的团队在Antithesis模糊测试平台中实践了这一改进,通过加权选择来控制测试覆盖率,例如分配88%的测试用例进行小文件上传,各分配4%进行中等、大型和超大文件上传1。Seipp强调,在操作随机变量时需要理解其数学域,因为非线性操作不能保持期望值E[f(X)] = f(E[X])的性质1。他所在的团队已将所有不必要的random_u64()调用替换为加权随机选择1。


评论