【发布时间】:2021-04-14 18:28:45
【问题描述】:
我正在看一本书,它有这个功能。我不明白使用rand()/(RAND_MAX) 有什么用,它不只是产生随机比率value 吗?我们如何使用随机比率value来检查它是否大于指数?
#include <cmath>
bool isCustomerArrived(double arvTimeDiff)
{
double value;
value = static_cast<double> (rand()) / static_cast<double>(RAND_MAX);
return (value > exp(- 1.0/arvTimeDiff));
}
我从书中得到的解释是
要运行模拟,我们需要知道在给定时间单位到达的客户数量以及为客户服务需要多长时间。我们使用统计学中的泊松分布,它表示在给定时间发生 y 事件的概率由以下公式给出:here 其中 λ 是 y 事件在该时间发生的预期值。假设,在 平均每四分钟就有一位顾客到达。在这四分钟的时间里,客户可以在四分钟中的任何一分钟到达。假设四分钟中每一分钟的可能性相等,因此,客户在四分钟内到达的期望值是 1/ 4 = 0.25。接下来,我们需要确定客户是否真的在给定的时间到达。 现在,P(0)= e^ (- λ) 是在给定时间没有事件发生的概率。泊松分布的基本假设之一是在短时间内发生多个结果的概率可以忽略不计。为简单起见,我们假设在给定的时间单位内只有一位顾客到达。因此,我们使用 e^ (- λ) 作为分界点来确定客户是否在给定的时间单位到达。假设平均每四分钟就有一位顾客到达。那么,λ = 0.25。我们可以使用一种算法来生成一个介于 0 和 1 之间的数字。如果生成的数字的值大于 e^ (- λ),我们可以假设客户在特定时间单位到达。例如,假设 rNum 是一个随机数,使得 0 ≤ rNum ≤ 1。如果 rNum 大于 e^ (- λ) ,客户在给定的时间单位到达。
【问题讨论】:
-
如果你自己问和回答几个简单的问题,你应该能自己弄清楚这一切是做什么的!好的,试试这个: 1) 你知道
rand()返回的值的范围是多少,最小和最大可能值? 2) 什么是RAND_MAX,tihs 值是什么意思? 3)如果rand()返回RAND_MAX,除法的结果是什么? 4) 如果 rand() 返回了RAND_MAX的一半,那么结果会是什么,是RAND_MAX的四分之一?你明白了吗? -
让我花几分钟了解一下
-
回答你的问题 1. rand() 范围在 0 到 RAND_MAX 2. RAND_MAX 表示 rand() 的上限,它是一个非常大的整数 3. 除法的结果将是 1(概率) 4. 0.5, 0.25 还是不明白,为什么要使用rand()
-
嗯,
rand()是生成随机数的最简单方法。所以,你说的是rand()除以RAND_MAX意味着你得到一个介于0和1之间的随机值,而不是0和RAND_MAX?那么,您还有什么不清楚的地方? -
这应该针对编写整个程序的人,以及这样做的原因。