【问题标题】:Probability of happening function [closed]发生函数的概率[关闭]
【发布时间】:2019-05-20 21:22:21
【问题描述】:

基本上我有一场比赛,在比赛的每一圈中,每个飞行员都有 5% 的撞车概率。

如何制作一个测试崩溃概率的函数?


//the professor gave us this code but wasn't able to use it/ or understand it

//Returns the value 1 with probability prob. Otherwise, return 0

int probEvent(float prob){
    return prob > ((float)rand()/RAND_MAX);
}


【问题讨论】:

  • 我建议你问问你的教授应该怎么用
  • 建议(与您的问题无关):使用double 而不是float
  • 显然最后一节课讲的是Monte Carlo simulations
  • 你可以使用假设检验。

标签: c random probability


【解决方案1】:

如何制作一个测试崩溃概率的函数?

调用probEvent() 数百万次,保持对值的计数。

unsigned crashes = 0;
for (int i = 0; i < 1000000; i++) crashes += probEvent(0.05);
printf("in 1000000 races there were %u crashes.\n", crashes);

【讨论】:

  • 圈数不是比赛。
  • 大声笑,你是对的@Strom。在 1000000 圈的比赛中,我敢肯定撞车概率会增加到 100% 以上 :)
【解决方案2】:

弄清楚如何使用probEvent() 的最佳方法是尝试一下。这是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int probEvent(float prob){
    return prob > ((float)rand()/RAND_MAX);
}

int main(int argc, const char * argv[]) {
    srand((unsigned int)time(NULL));

    for (float p = 0.0; p <= 1.01; p += 0.05)
        printf("p: %0.2f\t event:%d\n", p, probEvent(p));
    }
    return 0;
}

上面的程序调用probEvent(),其值介于 0 和 1 之间,并打印出该值和结果。每次运行它都会得到不同的结果,但随着p(“事件”发生的概率增加),通常会有更多的 1 在运行结束时出现。这是一个示例运行:

p: 0.00  event:0
p: 0.05  event:0
p: 0.10  event:0
p: 0.15  event:0
p: 0.20  event:1
p: 0.25  event:1
p: 0.30  event:0
p: 0.35  event:1
p: 0.40  event:0
p: 0.45  event:1
p: 0.50  event:1
p: 0.55  event:1
p: 0.60  event:0
p: 0.65  event:1
p: 0.70  event:1
p: 0.75  event:1
p: 0.80  event:1
p: 0.85  event:0
p: 0.90  event:0
p: 0.95  event:1
p: 1.00  event:1

如果您仍然不确定,请尝试运行类似的程序,但始终传递相同的 prob 值,并跟踪 1 的数量与 prob 的比较情况。

【讨论】:

    【解决方案3】:

    教授功能分为以下几个部分:

    获取一个介于 0 和 1 之间的随机值。

    ((float)rand()/RAND_MAX)

    比较 &gt; 运算符如果为真则计算为 1,如果为假则计算为 0。

    prob 变量包含以数字表示的概率,百分比除以 100。

    对于每一圈调用这个函数,如果它返回 1 则汽车已经崩溃了。

    【讨论】:

    • 鉴于pmg的回答,我选择不举例子,因为他是准确的。
    【解决方案4】:

    您的函数没有考虑有多个飞行员的情况。

    你问崩溃的概率是多少(一个或多个)。 您必须发送该功能数量的飞行员。 如果你有一名飞行员,坠机概率为 5%,如果你有两名飞行员 第一个飞行员坠毁的几率 (0.05) + 如果第一个飞行员没有坠毁,则乘以第二个飞行员坠毁的几率。 0.05+(1-0.05)*0.05 this like might help you to solve it

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2013-04-06
      • 1970-01-01
      • 2011-03-02
      • 2013-12-06
      • 2013-07-18
      • 2019-08-11
      • 2018-01-18
      • 2013-05-30
      相关资源
      最近更新 更多