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

C#按百分比实现概率分配的代码正确性验证咨询

结论

该代码无法准确实现10% : 10% : 80%的预期分布,存在两处问题

问题说明

  • 区间边界计算错误
    Random.Next(100)的返回值范围为左闭右开区间[0, 100),会生成0~99共100个等概率的整数。你的代码中第一个判断条件clickPercentage <= 20 / 2等价于clickPercentage <=10,覆盖0~10共11个取值,对应概率11%;第二个判断clickPercentage <=20覆盖1120共10个取值,对应概率10%;剩余2199共79个取值,对应概率79%,和预期分布不符。
  • 高频调用场景下的随机数种子问题
    如果Random randomGen = new Random();定义在方法内部,每次调用都会重新实例化,Random默认使用系统时钟作为种子,短时间内多次实例化会生成相同的随机数,进一步破坏概率分布。

修正方案

正确的区间划分规则为:
0~9共10个值返回Group A(10%),10~19共10个值返回Group B(10%),20~99共80个值返回IsRandom = false(80%),使用<代替<=避免边界计数错误,同时将Random实例提升为类级静态成员避免重复实例化:

// 类级静态随机数实例,全局复用
private static readonly Random randomGen = new Random();

...

int clickPercentage = randomGen.Next(100);

if (clickPercentage < 10)
{ 
    return new RandomGroup {IsRandom = true, Group = "A"};
}
else if (clickPercentage < 20)
{
    return new RandomGroup { IsRandom = true, Group = "B" };
}
else
{
    return new RandomGroup { IsRandom = false };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:03