一 准备
1 生成任意区间任意大小的伪随机数
2 什么是蒙特卡洛算法
二蒙特卡洛算法的实现
1 pi的蒙特卡洛计算方式
2 特殊图形的蒙特卡洛计算方式
通过这篇短文想说明两个道理:
看似高大上、神秘兮兮的算法,都是paper tiger;
计算机的计算方式(动辄几Ghz的主频)简直就是为蒙特卡洛度身定做;
一、 准备
1.1 生成任意区间任意大小的伪随机数
C语言中的rand()更深远的意义在于其对应于数学(概率论)中的均匀分布(uniformed distributed)。
C语言生成伪随机数的函数:
int rand(void);
该函数随机生成0~RAND_MAX之间内的整数:
#define RAND_MAX 0x7fff // 0x7fff == 32767
产生随机数需要设置种子:
void srand(unsigned int _Seed);
这两个函数所在的头文件是stdlib.h或者cstdlib,后者又被包含在iostream头文件中。
有了rand()这个可以生成0-RAND_MAX随机数(整数)的函数,经过一定的四则运算和取模运算,便可很容易地得到任意区间的随机数。
以生成(2, 5)之间的随机数(可整可小)为例:
double x = 3*(double(rand())/RAND_MAX)+2;
先通过double(rand())/RAND_MAX使随机数区间转换为(0, 1),再通过一定的伸缩平移实现对任意区间的仿真,这里的double类型转换不可省略,否则