You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuickCheck中Int类型arbitrary值分布范围过小的原因探究

QuickCheck生成Int最大值偏小的原因及解决方法

QuickCheck默认的arbitrary生成Int的策略不是均匀随机分布,而是刻意偏向小数值(包括0、正负小整数)。这种设计是为了测试时更快触发边界条件错误——很多程序在处理0、-1这类小边界值时更容易出问题,小值优先的生成策略能更早暴露这类bug。

你生成10000个Int却只得到最大值30,完全符合这个设计逻辑,它不会像普通随机数工具那样在全Int范围内均匀采样。

如果需要生成均匀分布的整数,可以用两种方式:

  • 用arbitrarySizedIntegral:这个生成器的分布更接近均匀,会随测试的size参数调整数值范围,生成的数范围更广。
  • 手动指定区间:用choose函数限定范围,比如生成0到10000的均匀随机数:
    a <- generate (replicateM 10000 (choose (0, 10000))) :: IO [Int]
    

内容的提问来源于stack exchange,提问作者RandomB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:19:56