
- 外文名
- random number
- 方 法
- 随机数发生器
- 应用学科
- 统计学
- 中文名
- 随机数
- 应 用
- 进行蒙特卡罗模拟法计算
- 特 性
- 后面的数与前面的数毫无关系
-
随机数
2018-11-04 20:57:021. 库 #include<random> 2. 初始化 ...srand((unsigned)time(NULL));...3. 产生一定范围随机数 整数 (rand()%(b-a))+a+1; //获得(a,b)的随机数 (rand()%(b-a))+a; //获得[a,b)的随机数 (ran...1. 库
#include<cstdlib>
2. 初始化
srand(time(NULL)); srand(time(0)); //放在for循环之前,否则会很慢
3. 产生一定范围随机数
- 整数
通用公式:rand()%n+a; //a为起始值,n为整数范围 (rand()%(b-a))+a+1; //获得(a,b)的随机数 (rand()%(b-a))+a; //获得[a,b)的随机数 (rand()%(b-a+1))+a; //获得[a,b]的随机数
- 浮点数
(double)rand()/(RAND_MAX +0.0);//获得[0,1]之间的浮点数 (double)rand()/(RAND_MAX +1.0);//获得[0,1)之间的浮点数 rand()+(double)rand()/RAND_MAX ; //获得随机小数
4.随机数原理
RAND_MAX是longint的最大值2147483647,rand()返回的是整形,因此rand()/RAND_MAX返回值要么是0要么是1,但是几乎不为1(概率很小)。
rand()*6.0/RAND_MAX 的结果为浮点型,可能是0.xxx 1.xxx 2.xxx 3.xxx 4.xxx 5.xxx
同理,对于乘以x也是这样,但x必须是一个浮点型!!! -
随机数随机数随机数随机数
2011-05-06 17:46:08随机数随机数随机数随机数随机数随机数随机数随机数 -
C++ 随机数
2018-10-07 19:20:19c++随机数产生以及扩展注:本文的知识来自网络和个人的整理和理解。
当初写这篇博客的时候,用的IDE是Dev C++。当时可以直接使用诸如
rand()
、srand()
等函数。现在好像不行了,还是需要加上#include<cstdlib>
。本文的代码已经修改了,图片没法修改,见谅。一、rand函数。
int rand(void);
rand()函数不需要引入任何头文件,可直接使用,返回0~RAND_MAX(32767)的整数,不需要参数,它是根据种子生成的,根据不同的种子产生不同的随机序列。
这个程序无论何时何地,运行的结果都如上所示。系统默认的种子是1,随机序列又是根据种子产生的,所以说每次使用的随机序列都是固定的,随机数不随机。要想使它随机,就必须使它的种子随机。
二、srand函数。
void srand(unsigned int seed);
srand()函数就是用来设置rand()函数的种子的。
同样srand()函数也不需要头文件,可以直接使用,根据不同的参数产生不同的种子。
同样,这个程序如同上个程序,何时何地运行结果都一样,因为srand()的参数一样,生成的种子一样,rand()函数返回的值也一样。那么就只有在srand()的参数上做文章。三、time函数
time(NULL);
函数会返回1970年1月1日至今所经历的时间(以秒为单位),需要引入头文件<time.h>
用时间值做种子,就可以产生随机数了,因为时间总是在变的嘛。将time(NULL)作为srand()的参数,更新种子,再用rand()函数产生随机数。
#include<iostream> #include<cstdlib> #include<time.h> using namespace std; int main() { srand(time(NULL)); cout << rand() << endl; return 0; }
四、注意
需要注意的是,srand(time(NULL));只需要执行一次即可。
如果每次使用rand()前都执行一遍,就会出现下面的情况:
这是因为time()是以秒为单位的,在同一秒内返回的值都是相同的,种子是相同的,产生的随机序列自然也相同。每次都从同一个序列的开头取数,可不就一样了嘛。五、扩展
rand()产生的数是0~RAND_MAX( 0x7fff),也就是说,只能生成15位。如果需要32位的,可以进行扩展:
unsigned int rand_32() { return (rand()&0x3)<<30 | rand()<<15 | rand(); }
扩展之后测试一下:
#include<iostream> #include<time.h> #include<cstdlib> #include<vector> using namespace std; unsigned int rand_32() { return (rand()&0x3)<<30 | rand()<<15 | rand(); } int main() { srand(time(NULL)); unsigned a; for(int i = 0; i < 10; i++){ a = rand_32(); cout << hex << a << endl; } return 0; }
以十六进制输出的结果如下:
因为担心这样扩展会不会出现问题,于是进行下列测试:int main() { srand(time(NULL)); vector<unsigned int> v; unsigned a; for(long long i = 0; i < 50000; i++){ a = rand_32(); if(a == 0) cout << "出现 0 " << endl; auto t = find(v.begin(),v.end(),a); if(t != v.end()){ cout << "重复" << endl; } else v.push_back(a); } return 0; }
每次测试50000个数,测了三次,运行结果如下:
没什么问题,测了三次,每次不出现0,不出现重复的值。
顺便贴上8位的代码:unsigned char rand_8() { return (unsigned char)(rand()&0xff); }
-
Java 随机数
2019-06-08 17:36:43本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 (02). 通过Math....本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。
广义上讲,Java中的随机数的有三种产生方式:
(01). 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
(02). 通过Math.random()返回一个0到1之间的double值。
(03). 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。
第1种通过System.currentTimeMillis()来获取随机数。实际上是获取当前时间毫秒数,它是long类型。使用方法如下:
final long l = System.currentTimeMillis();
若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0, 100)之间的int整数。方法如下:
final long l = System.currentTimeMillis(); final int i = (int)( l % 100 );
第2种
通过Math.random()来获取随机数。实际上,它返回的是0(包含)到1(不包含)之间的double值。使用方法如下:
final double d = Math.random();
若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0, 100)之间的int整数。方法如下:
final double d = Math.random(); final int i = (int)(d*100);
第3种
通过Random类来获取随机数。
使用方法如下:
(01) 创建Random对象。有两种方法可以创建Random对象,如下:Random random = new Random();//默认构造方法 Random random = new Random(1000);//指定种子数字
(02) 通过Random对象获取随机数。Random支持的随机值类型包括:boolean, byte, int, long, float, double。
比如,获取[0, 100)之间的int整数。方法如下:int i2 = random.nextInt(100);
Random 的函数接口
// 构造函数(一): 创建一个新的随机数生成器。 Random() // 构造函数(二): 使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。 Random(long seed) boolean nextBoolean() // 返回下一个“boolean类型”伪随机数。 void nextBytes(byte[] buf) // 生成随机字节并将其置于字节数组buf中。 double nextDouble() // 返回一个“[0.0, 1.0) 之间的double类型”的随机数。 float nextFloat() // 返回一个“[0.0, 1.0) 之间的float类型”的随机数。 int nextInt() // 返回下一个“int类型”随机数。 int nextInt(int n) // 返回一个“[0, n) 之间的int类型”的随机数。 long nextLong() // 返回下一个“long类型”随机数。 synchronized double nextGaussian() // 返回下一个“double类型”的随机数,它是呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。 synchronized void setSeed(long seed) // 使用单个 long 种子设置此随机数生成器的种子。
获取随机数示例
下面通过示例演示上面3种获取随机数的使用方法。
源码如下(RandomTest.java):1 import java.util.Random; 2 import java.lang.Math; 3 4 /** 5 * java 的随机数测试程序。共3种获取随机数的方法: 6 * (01)、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 7 * (02)、通过Math.random()返回一个0到1之间的double值。 8 * (03)、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。 9 * 10 * @author skywang 11 * @email kuiwu-wang@163.com 12 */ 13 public class RandomTest{ 14 15 public static void main(String args[]){ 16 17 // 通过System的currentTimeMillis()返回随机数 18 testSystemTimeMillis(); 19 20 // 通过Math的random()返回随机数 21 testMathRandom(); 22 23 // 新建“种子为1000”的Random对象,并通过该种子去测试Random的API 24 testRandomAPIs(new Random(1000), " 1st Random(1000)"); 25 testRandomAPIs(new Random(1000), " 2nd Random(1000)"); 26 // 新建“默认种子”的Random对象,并通过该种子去测试Random的API 27 testRandomAPIs(new Random(), " 1st Random()"); 28 testRandomAPIs(new Random(), " 2nd Random()"); 29 } 30 31 /** 32 * 返回随机数-01:测试System的currentTimeMillis() 33 */ 34 private static void testSystemTimeMillis() { 35 // 通过 36 final long l = System.currentTimeMillis(); 37 // 通过l获取一个[0, 100)之间的整数 38 final int i = (int)( l % 100 ); 39 40 System.out.printf("\n---- System.currentTimeMillis() ----\n l=%s i=%s\n", l, i); 41 } 42 43 44 /** 45 * 返回随机数-02:测试Math的random() 46 */ 47 private static void testMathRandom() { 48 // 通过Math的random()函数返回一个double类型随机数,范围[0.0, 1.0) 49 final double d = Math.random(); 50 // 通过d获取一个[0, 100)之间的整数 51 final int i = (int)(d*100); 52 53 System.out.printf("\n---- Math.random() ----\n d=%s i=%s\n", d, i); 54 } 55 56 57 /** 58 * 返回随机数-03:测试Random的API 59 */ 60 private static void testRandomAPIs(Random random, String title) { 61 final int BUFFER_LEN = 5; 62 63 // 获取随机的boolean值 64 boolean b = random.nextBoolean(); 65 // 获取随机的数组buf[] 66 byte[] buf = new byte[BUFFER_LEN]; 67 random.nextBytes(buf); 68 // 获取随机的Double值,范围[0.0, 1.0) 69 double d = random.nextDouble(); 70 // 获取随机的float值,范围[0.0, 1.0) 71 float f = random.nextFloat(); 72 // 获取随机的int值 73 int i1 = random.nextInt(); 74 // 获取随机的[0,100)之间的int值 75 int i2 = random.nextInt(100); 76 // 获取随机的高斯分布的double值 77 double g = random.nextGaussian(); 78 // 获取随机的long值 79 long l = random.nextLong(); 80 81 System.out.printf("\n---- %s ----\nb=%s, d=%s, f=%s, i1=%s, i2=%s, g=%s, l=%s, buf=[", 82 title, b, d, f, i1, i2, g, l); 83 for (byte bt:buf) 84 System.out.printf("%s, ", bt); 85 System.out.println("]"); 86 } 87 }
-
C/C++产生随机数
2010-11-15 13:34:00 -
Android产生随机数
2017-05-30 18:03:14Android产生随机数1.产生指定位数的随机数以产生6位数随机数为例int num = (int) ((Math.random() * 9 + 1) * 100000);产生其他位数随机数在最后面要乘的数即 100000 后加0即可2.产生指定范围的随机数以产生[10,99]... -
01随机数产生其他随机数_产生一个随机数
2020-07-08 09:11:3001随机数产生其他随机数 作者 克里斯·科耶尔 最近更新时间 2014年8月14日 翻译自: https://css-tricks.com/generate-a-random-number/01随机数产生其他随机数 ... -
Java生成32位随机数,8位随机数
2019-01-04 11:28:11Java生成32位随机数,短位随机数工具类 -
Python中产生随机数
2019-07-09 18:42:27Python产生随机数: 一.Python自带的random库 1.参生n--m范围内的一个随机数: random.randint(n,m) 2.产生0到1之间的浮点数: random.random() 3.产生n---m之间的浮点数: random.uniform(1.1,5.4) 4.产生从n... -
产生随机数(随机数)
2020-02-07 19:59:29产生大量测试用的随机数 最近学了排序算法,有的需要大量数据来测试算法复杂度,自己定义又太麻烦,所以看了一种产生随机大小,可控范围的数组来进行测试。 用到了随机数的两个函数,rand和srand 具体的可以自行... -
随机数随机数种子——通俗易懂版
2019-04-21 15:32:43随机数就是就随机数种子中取出的数。 种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。 但这个随技术并不真正随机。因为它是通过... -
lua随机数种子取随机数
2018-09-11 17:29:05lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点 我们也需要给随机数设置随机数种子:math.randomseed(xx) lua对随机数种子也是有一定要求的:不能太相近 lua中的os.time... -
用python生成随机数的几种方法
2018-07-13 20:32:27本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1 从给定参数的正态分布中... -
unity之随机数
2020-10-19 09:20:16生成随机数 一、使用random生成随机数 为给游戏添加趣味性经常会在游戏中随机生成一些不确定的东西。 1、使用Random生成随机数。 语句:print(Random.Range(4,10)); 表示应用Random方法随机生成4到10之间的整数... -
Java随机数
2018-12-11 11:11:30在实际开发中产生随机数的使用是很普遍的,所以在程序中进行产生随机数操作很重要。在Java中主要提供两种方式产生随机数,分别为调用Math类的random()方法和Random类提供的产生各种数据类型随机数的方法。 1、Math.... -
Python进阶(三十)-Python3实现随机数
2017-04-06 16:30:15Python进阶(三十)-Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串。 random.seed(x)改变随机数生成器的种子seed。 一般不必特别去设定seed,Python会自动选择seed。 random... -
随机数安全
2019-07-13 17:45:52随机数分类 真随机数 : 通过物理实验得出,比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等 伪随机数 : 通过一定算法和种子得出。软件实现的是伪随机数,其中难以预测的随机数称为强伪随机数,易于预测的... -
SecureRandom生成随机数
2018-07-20 20:50:181、生成随机数的多种方法 Math.random()一随机数 java.util.Random伪随机数(线性同余法生成) java.security.SecureRandom真随机数 a随机数,采用的是类似于统计学的随机数生成规则,其输出结果很容易预测,... -
Qt随机数
2019-06-04 20:06:49qrand()%30:产生随机数,一模算来处理,该例子产生的是0-29的随机数; 如果需要产生负数的随机数,可以在qrand()%30的基础上加一个负数,来实现-?到+? 例: 产生-45到45的随机数:n=-45+qrand()%90; 换个... -
java随机生成6位随机数 5位随机数 4位随机数
2017-07-03 20:11:17生成6位随机数(不会是5位或者7位,仅只有6位): [java] view plaincopy System.out.println((int)((Math.random()*9+1)*100000)); 同理,生成5位随机数: ... -
正态随机数和柯西随机数
2017-04-20 18:04:46要想实现随机数和柯西随机数,先要有任意随机数产生,后面柯西需要。代码基于C++,如下:template T randT(T Lower, T Upper) { T temp; if (Lower > Upper) { temp = Upper; Upper = Lower; Lower = temp; -
java随机数
2017-12-20 16:53:53草稿 1 真随机数 准随机数 伪随机数2 产生随机数的方式3 假设方法menod()产生的是随机数,那么a*method()+method()是随机数吗?https://www.zhihu.com/question/242979234 java中的随机数是用的问题2的哪种方式... -
verilog随机数
2019-12-26 17:15:28$random % a,其中 a > 0,它可以产生一个范围为 (-a + 1)~ (a - 1) 中的随机数, {$random }% a, 其中 a > 0, 它可以产生一个范围 为 0~ (a - 1) 的随机数
-
python办公自动化技巧
-
量化高频交易系统tick数据采集
-
小米8后指纹版维修原理图PCB位置图(PDF格式)
-
ae插件TrapcodeParticular
-
The C Programming Language 用例与练习——1.9 字符数组
-
google_play_services_8115000_r27.zip
-
动态规划解数字三角型问题
-
1.23智力+选择+判断
-
【数据分析-随到随学】Spark理论及实战
-
【Mybatis系列】分页
-
MySQL锁总结【摘录】
-
Java无损导出及转换word文档
-
云计算、SDN复习资料.docx
-
Excel高级图表技巧
-
微信支付2021系列之付款码支付一学就会java版
-
安装nltk中出现的问题
-
SpringMVC的文件上传
-
google_play_services_8298000_r28.zip
-
指针
-
红米note4维修原理图PCB位置图(PDF格式)