自从注册后好久没有写过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次,然后除一下,结果就出现了。
程序非常简单,写了十分钟不到,就不细解释了。
来看一下结果: