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


    在这里插入图片描述
    本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

    一、方法一

    1、主要函数

       rand()函数是C++标准库中的一个伪随机数生成器,它返回一个在0到RAND_MAX之间的整数,其中RAND_MAX是一个常量,通常定义为32767。由于rand()函数生成的随机数序列是固定的,因此在使用rand()函数之前,通常需要调用srand()函数初始化随机数种子。
    srand()函数接受一个无符号整数作为参数,用于初始化随机数种子。通常可以使用当前时间作为随机数种子,如下所示:

    #include 
    #include 
    
    int main() {
        srand(time(NULL)); // 使用当前时间作为随机数种子
        int x = rand(); // 生成一个随机数
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

      上面的代码中,srand(time(NULL))调用了srand()函数初始化随机数种子。time(NULL)返回当前时间,因此每次运行程序时,随机数种子都不同。这样就可以生成不同的随机数序列。
      如果要生成一个指定范围内的随机整数,可以使用取模运算符(%)将rand()函数的返回值对范围大小取模。例如,要生成一个0到99之间的随机整数,可以这样写:

    int x = rand() % 100;
    
    • 1

      上面的代码中,rand() % 100调用了rand()函数生成一个随机整数,并对100取模,得到一个0到99之间的随机整数。
      如果要生成一个指定范围内的随机浮点数,可以这样写:

    double x = (double)rand() / RAND_MAX * (max - min) + min;
    
    • 1

      其中,minmax分别表示随机数的最小值和最大值。上面的代码中,(double)rand() / RAND_MAX * (max - min) + min调用了rand()函数生成一个随机整数,并将其转换为浮点数。然后除以RAND_MAX得到一个0到1之间的随机浮点数。最后乘以(max - min)并加上min得到一个在指定范围内的随机浮点数。

    2、示例代码

    std::nth_element()
    
    • 1

    二、方法二

    1、方法概述

      由于测量误差可以是正的,也可以是负的,为了使构造的测量误差更符合于实际,则必须在(-1,1)之间产生一组随机数。为此,把产生的(0,1)之间的随机数先扩大10倍或100倍,然后取整得到正整数z,把z值作为-1的指数,再与产生的(0,1)间的随机数相乘,这样就可以通过计算机得到(-1,1)之间的均匀分布的随机数值,再用产生的随机数乘上一个可能出现误差的限值,就构成了测点上可能出现的测量误差值来。

    2、参考文献

    [1]成枢. 地面沉降变形预计模型与监测技术研究[D].山东科技大学,2005.

    3、示例代码

    #include 
    #include 
    
    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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    三、方法三

    1、参考链接

    C++:生成-1到1之间的随机浮点数

    2、示例代码

    #include 
    #include 
    
    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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    tf serving 从S3 minio 加载模型
    systemverilog/uvm的 blog https://www.amiq.com/consulting/blog/
    前端 Jenkins 自动化部署
    大都会人寿线下培训第一天记录总结
    使用 COPY 加速 PostgreSQL 批量插入
    css实现鼠标悬停时元素的显示与隐藏
    Java Matcher.find()方法具有什么功能呢?
    如何进行SEO优化数据分析?(掌握正确的数据分析方法,让您的网站更上一层楼!)
    Windows找不到文件xxxxx.exe。请确认文件名是否正确后,再试一次
    网络攻防中黑客常用技术跨站脚本技术:html, js 的自解码机制,解码顺序,浏览器urlencode 的影响,测试样例
  • 原文地址:https://blog.csdn.net/qq_36686437/article/details/132911649