我正在研究圣彼得堡悖论的模拟,当时我意识到我的硬币翻转代码从未记录过连续超过15个头的任何条纹.我运行模拟100,000,000次,这应该导致平均1526条头长16条.
(0.5 ^ 16)x 100,000,000 = 1526
显然,出了点问题.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[])
{
srand(time(0));
int i, lim = 100000000, streak = 0, maxstreak = 0;
for (i = 0; i < lim; ++i)
{
if (rand()%2) {
streak++;
if (streak > maxstreak) maxstreak = streak;
}
else streak = 0;
}
printf("Ran %d times, longest streak of %d\n", lim, maxstreak);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每次都返回以下内容:
Ran 100000000 …Run Code Online (Sandbox Code Playgroud)