本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。
一、方法一
1、主要函数
rand()
函数是C++标准库中的一个伪随机数生成器,它返回一个在0到RAND_MAX
之间的整数,其中RAND_MAX
是一个常量,通常定义为32767。由于rand()
函数生成的随机数序列是固定的,因此在使用rand()
函数之前,通常需要调用srand()
函数初始化随机数种子。
srand()
函数接受一个无符号整数作为参数,用于初始化随机数种子。通常可以使用当前时间作为随机数种子,如下所示:
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL)); // 使用当前时间作为随机数种子
int x = rand(); // 生成一个随机数
return 0;
}
上面的代码中,srand(time(NULL))
调用了srand()
函数初始化随机数种子。time(NULL)
返回当前时间,因此每次运行程序时,随机数种子都不同。这样就可以生成不同的随机数序列。
如果要生成一个指定范围内的随机整数,可以使用取模运算符(%)将rand()函数的返回值对范围大小取模。例如,要生成一个0到99之间的随机整数,可以这样写:
int x = rand() % 100;
上面的代码中,rand() % 100调用了rand()函数生成一个随机整数,并对100取模,得到一个0到99之间的随机整数。
如果要生成一个指定范围内的随机浮点数,可以这样写:
double x = (double)rand() / RAND_MAX * (max - min) + min;
其中,min
和max
分别表示随机数的最小值和最大值。上面的代码中,(double)rand() / RAND_MAX * (max - min) + min
调用了rand()
函数生成一个随机整数,并将其转换为浮点数。然后除以RAND_MAX
得到一个0到1之间的随机浮点数。最后乘以(max - min)
并加上min
得到一个在指定范围内的随机浮点数。
2、示例代码
std::nth_element()
二、方法二
1、方法概述
由于测量误差可以是正的,也可以是负的,为了使构造的测量误差更符合于实际,则必须在(-1,1)之间产生一组随机数。为此,把产生的(0,1)之间的随机数先扩大10倍或100倍,然后取整得到正整数z,把z值作为-1的指数,再与产生的(0,1)间的随机数相乘,这样就可以通过计算机得到(-1,1)之间的均匀分布的随机数值,再用产生的随机数乘上一个可能出现误差的限值,就构成了测点上可能出现的测量误差值来。
2、参考文献
[1]成枢. 地面沉降变形预计模型与监测技术研究[D].山东科技大学,2005.
3、示例代码
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int a = 0, b = 2;//区间(a,b]
srand((unsigned int)time(NULL)); // 随机数种子,保证每次运行产生不同的随机数序列
for (int i = 0; i < 10; ++i)
{
float r01 = rand() / float(RAND_MAX); // 生成0~1的随机数
int z = r01 * 100;
float d = pow(-1, z) * r01;
cout << d << endl;
}
return 0;
}
三、方法三
1、参考链接
2、示例代码
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int a = 0, b = 2;//区间(a,b]
srand((unsigned int)time(NULL));//随机数种子,保证每次运行产生不同的随机数序列
for (int i = 0; i < 5; i++)
{
int t; //随机整数1、2,用于控制随机浮点数的正负
float d; //[-1,1]间的随机数
t = rand() % (b - a) + a + 1;
d = pow(-1, t)*rand() / float(RAND_MAX); //生成[-1,1]之间的随机浮点数
cout << d;
cout << endl;
}
return 0;
}