【问题标题】:Percentage Based Probability基于百分比的概率
【发布时间】:2013-12-24 04:31:13
【问题描述】:

我有这个代码sn-p:

Random rand = new Random();
int chance = rand.Next(1, 101);

if (chance <= 25) // probability of 25%
{
    Console.WriteLine("You win");
}
else
{
    Console.WriteLine("You lose");
}

我的问题是,这里真的计算出 25% 的获胜概率吗? 难道这里的玩家获胜的几率真的是25%?

编辑:

我刚刚写了这个:

        double total = 0;
        double prob = 0;
        Random rnd = new Random();
        for (int i = 0; i < 100; i++)
        {
            double chance = rnd.Next(1, 101);
            if (chance <= 25) prob++;
            total++;
        }
        Console.WriteLine(prob / total);
        Console.ReadKey();

而且它非常不准确。它从大约 0.15 到 0.3。

但是当我进行更多检查(从 (i

这是为什么?为什么 100 次检查还不够准确?

【问题讨论】:

  • 是的,如果 rand 给出随机值的正态分布。
  • @Vlad 我认为您的意思是统一分布。正态分布是高斯分布。
  • 你说得对,我的意思是一回事,写的又是另一回事。谢谢。
  • 如果你掷骰子 6 次,如果你得到一个数字的 2 或 3 个而不是每个数字 1 个,你会说它“非常不准确”吗?
  • 变量 total 服从 p=0.25 的二项分布。因此,100 次试验的总标准偏差为 sqrt(25) = 5。因此,使用正态近似值,您只会期望约 66% 的测试在区间 20

标签: c# probability percentage


【解决方案1】:

这很容易自己检查:

Random rand = new Random(); 
int yes = 0;
const int iterations = 10000000;
for (int i = 0; i < iterations; i++)
{
   if (rand.Next(1, 101) <= 25)
   {
       yes++;
   }
}
Console.WriteLine((float)yes/iterations);

结果:

0.2497914

结论:是的,是的。


编辑:只是为了好玩,LINQy 版本:

Random rand = new Random(); 
const int iterations = 10000000;
int sum = Enumerable.Range(1, iterations)
                    .Count(i => rand.Next(1, 101) <= 25);
Console.WriteLine(sum / (float)iterations);

【讨论】:

  • 谢谢,但我已经用一个类似检查的代码更新了帖子。问题是,如果它检查 100 次,结果可能在 0.15 到 0.3 之间,但是当我检查 10000 次时,它会更加准确(在我编写的代码中)。为什么会这样?为什么 100 张支票还不够?
  • 抛硬币两次,结果一样,是不是硬币破了?
  • @Rotem 我认为您需要足够的样本量。例如,我认为您不能使用 25 个样本来确定 25% 的概率是否正常工作。
  • 样本不是25个,有1000万个。
【解决方案2】:

在大多数情况下,我会说是的。但是,您必须记住,大多数随机化算法都使用伪随机生成器,因此在某种程度上,您受制于特定生成器的特性。我同意@AwokeKnowing,你也可以只做一个 1 到 4 之间的随机数并得到相同的结果。我假设 .Net 随机化算法对于大多数情况应该足够了。欲了解更多信息,请参阅:

http://en.wikipedia.org/wiki/Pseudorandom_number_generator

【讨论】:

    【解决方案3】:

    是的,这应该可以正常工作。就像 >=75 也可以。如果你只想要 25%,你可以继续做一个 1 到 4 之间的随机数。

    但请注意,25% 的机会并不意味着在 100 次尝试中,他会赢 25 次。这只是意味着每次他有25%的机会获胜。理论上,他每次都有可能获胜。 (但这不会发生,尤其是使用伪随机生成器时)。

    在内部,随机数将介于 0 和 1 之间,因此使用 4 和使用 1000 一样随机,就目前而言。添加参数只是将其投影到您想要的范围内。

    【讨论】:

    • 我知道,但有时我不能只使用分数(例如百分比,如 65% 或 55%),所以我也打算将其用于其他百分比。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多