蒙特卡洛 c语言,从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)

本文介绍了如何在C语言中生成伪随机数,并利用这些随机数实现蒙特卡洛算法,包括计算π的近似值和特殊图形的面积。随着迭代次数增加,计算精度逐渐提高,展示了蒙特卡洛算法的有效性。
摘要由CSDN通过智能技术生成

一 准备

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类型转换不可省略,否则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值