C++生成-1到1的随机数

在这里插入图片描述
本文由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;

  其中,minmax分别表示随机数的最小值和最大值。上面的代码中,(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、参考链接

C++:生成-1到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;
}

猜你喜欢

转载自blog.csdn.net/qq_36686437/article/details/132911649