数学常数最令人着迷的就是,它们常常出现在一些看似与之毫不相干的场合中。 随便取一个 0 到 1 之间的数,再加上另一个 0 到 1 之间的随机数,然后再加上一个 0 到 1 之间的随机数??直到和超过 1 为止。一个有趣的问题:平均需要加多少次,才能让和超过 1 呢?答案是 e 次,自然对数。
下面用程序模拟:
#include#include #include #define NUM 11 int main() { int sum = 0; int i, wait; double val, random; srand(time(NULL)); for (i=0; i 程序运行结果:
0.857692 0.320536 第0次测试完毕 0.147221 0.663350 0.700186 第1次测试完毕 0.613086 0.967589 第2次测试完毕 0.633747 0.918577 第3次测试完毕 0.297678 0.709006 第4次测试完毕 0.580554 0.894955 第5次测试完毕 0.927702 0.112247 第6次测试完毕 0.578814 0.012268 0.030488 0.066317 0.048189 0.252083 0.439344 第7次测试完毕 0.238136 0.988189 第8次测试完毕 0.114628 0.657918 0.603290 第9次测试完毕 0.511704 0.642293 第10次测试完毕 平均需要 2.636364 次下面我们修改下程序,比如测试10000组数据,然后算平均次数:
#include#include #include #define NUM 10000 int main() { int sum = 0; int i, wait; double val, random; srand(time(NULL)); for (i=0; i 程序运行结果:
平均需要 2.727400 次这个值就非常接近自然对数e,其值约等于2.718281828。
那么我们可以打印出这100000个测试数据,然后统计,需要1个随机数和就大于等于1有几组测试数据,需要2个随机数和就大于等于1有几组测试数据。。。把其分布打印出来。
#include#include #include #define TIMES 100000 #define COUNT 11 int main(void) { int i,j; double sum,ave; long int Sum =0; int count[TIMES] = {0}; int number[COUNT] = {0}; srand(time(NULL)); for(i=0;i NUL 2>NUL"); getch(); } 程序运行结果:
1 4 0.000040 2 49817 0.498170 3 33620 0.336200 4 12360 0.123600 5 3344 0.033440 6 744 0.007440 7 94 0.000940 8 14 0.000140 9 3 0.000030 10 0 0.000000 2.719190本文地址:http://www.nowamagic.net/librarys/veda/detail/467,欢迎访问原出处。