生成随机数(c++)

方法:使用rand()函数和srand()函数即可

单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关,最小是32767。不过rand()是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变。

其实,对于rand()的范围,我们是可以进行人为设定的,只需要在宏定义中定义一个random(int x)函数,就可以生成范围为0至x的随机数值。当然,也可以定义为random(a,b),使其生成范围为a至b的随机数值。

头文件<cstdlilb>

 

srand()可用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,我们可以获取不同的随机数序列。可以利用srand((unsigned int)(time(NULL))的方法,利用系统时钟,产生不同的随机数种子。

不过要调用time(),需要加入头文件< ctime >。

 

一个大数,除以一个数x取余,可以得到0-x范围的数

  • 取得(0,x)的随机整数:rand()%x;
  • 取得[a,b)的随机整数:rand()%(b-a)+a;
  • 取得[a,b]的随机整数:rand()%(b-a+1)+a;
  • 取得(a,b]的随机整数:rand()%(b-a)+a+1;
  • 取得0-1之间的浮点数:rand()/double(RAND_MAX)
### C++ 中实现 RRT 算法生成随机数 为了在C++中实现RRT算法并生成随机数,通常会利用标准库中的 `<random>` 头文件来创建高质量的伪随机数生成器。这不仅能够满足RRT对于随机性的需求,还能够在不同平台上保持一致的行为。 ```cpp #include <iostream> #include <random> // 定义一个简单的结构体表示二维空间中的点 struct Point { double x; double y; Point(double _x, double _y): x(_x), y(_y) {} }; class RRT { public: // 构造函数初始化随机设备和分布范围 RRT() : gen(rd()) {} // 生成指定范围内均匀分布的随机坐标点 Point getRandomPoint(const std::pair<double,double>& rangeX, const std::pair<double,double>& rangeY) { uniform_real_distribution<> dis_x(rangeX.first, rangeX.second); uniform_real_distribution<> dis_y(rangeY.first, rangeY.second); return Point(dis_x(gen), dis_y(gen)); } private: std::random_device rd; // 随机种子源 std::mt19937 gen; // 使用Mersenne Twister作为随机引擎 }; int main(){ RRT planner; auto point = planner.getRandomPoint({0.0, 10.0}, {0.0, 10.0}); std::cout << "Random Generated Point: (" << point.x << ", " << point.y << ")" << std::endl; return 0; } ``` 上述代码展示了如何定义一个类 `RRT` 来封装随机数生成功能[^1]。这里选择了梅森旋转算法 (Mersenne Twister),即 `std::mt19937` ,因为它提供了良好的统计特性以及较快的速度。同时,通过设置不同的参数可以调整随机坐标的取值区间,从而适应具体的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值