平均要取多少个(0,1)中的随机数才能让和超过1

自从注册后好久没有写过blog了,貌似自从毕业后随着年龄越来越大变得越来越懒了,这都转眼毕业两年了。。。

算了,废话少说,还是说正文吧。

“ 数学常数最令人着迷的就是,它们常常出现在一些看似与之毫不相干的场合中。 随便取一个 0 到 1 之间的数,再加上另一个 0 到 1 之间的随机数,然后再加上一个 0 到 1 之间的随机数⋯⋯直到和超过 1 为止。一个有趣的问题:平均需要加多少次,才能让和超过 1 呢?答案是 e 次

这是这篇Blog里面的一段话,原文是用Mathematica这个伟大的软件做的计算,但是呢,作为一个程序员,看到可以用程序实现的东西都按捺不住要写一写,所以就有了这么一篇文章。下面的代码是用C语言写成,环境是WIN XP XP3 + GCC 3.4.5 +NPP,几百行以内的程序实在是懒得开庞大的IDE,就这样凑合吧,呵呵

 

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

#define NUM 9999999

int main()
{

int sum=0;
srand(time(NULL));
for (int i=0;i<NUM;i++)
	{
	double val=0;
	while(val <1)
	{
		val+=(rand()/(double)RAND_MAX);
		sum++;
	}
	}
printf("%f\n",sum/(double)NUM);
return 0;
}

 简单的来说程序就是统计了一下NUM次取数,共取了sum次,然后除一下,结果就出现了。

程序非常简单,写了十分钟不到,就不细解释了。

来看一下结果:

2010080900520819.jpg

 

 

 

转载于:https://www.cnblogs.com/aslan/archive/2010/08/09/1795382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值