在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。

有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。

下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。

java 随机数种子_Java--随机数和随机数种子(转)相关推荐

  1. c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化

    原文链接 随机数.随机数种子 在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有 ...

  2. java random产生随机数_java的三种随机数生成方式,必掌握

    随机数的产生在一些代码中很常用,也是我们必须要掌握的.而java中产生随机数的方法主要有三种: 第一种:new Random() 第二种:Math.random() 第三种:currentTimeMi ...

  3. java 获取区间随机数_Java获取随机数

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  4. java 获取区间随机数_Java获取随机数的3种方法

    主要介绍了Java获取随机数的3种方法,主要利用random()函数来实现 方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1))例: (int)(1+Math.rando ...

  5. java中的随机数_Java获取随机数

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  6. java 获取区间随机数_Java获取随机数的几种方法

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  7. java安全随机数_Java随机数的陷阱

    前言 随机数我们应该不陌生,业务中我们用它来生成验证码,或者对重复性要求不高的id,甚至我们还用它在年会上搞抽奖.今天我们来探讨一下这个东西.如果使用不当会引发一系列问题. Java中的随机数 我们需 ...

  8. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

    Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...

  9. java中随机数怎么定义类_浅析Java中的随机数类

    Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...

  10. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

最新文章

  1. c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx
  2. 业余实现一个统计A股数据工具
  3. 面向对象4(匿名对象、内部类、包、修饰符、代码块)
  4. 产品配件类目税目分类_我国消费税税目种类有哪些?
  5. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库
  6. 抖音发布春节数据报告:394万个视频和平安相关 医务人员获赞8.6亿次
  7. webpack插件实现自动抽取css中的主题色样式,并动态切换主题色(element-ui)
  8. [Noip2007]Core树网的核
  9. Linux: kill
  10. Tomcat部分目录作用
  11. 玩转计划任务命令:schtasks
  12. java通过JNI调用DLL文件
  13. Python制作动态桌面壁纸程序-摆脱付费-Mili_Wallpaper
  14. 如何判断是否被职场PUA探针及处理
  15. jupyter notebook 代码自动补全 加 显示变量功能 以及让3d图片可以旋转
  16. 无剑100SOC(wujian100)挂UART外设之④修改SDK
  17. 计算机毕业论文乐谱播放器,给大家推荐一个超强的播放器!我刚发现的。居然显示乐谱...
  18. html制作满天星,满天星怎么做干花
  19. STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭
  20. Spring Boot gradle 打包瘦身减少jar包体积 含demo

热门文章

  1. JDBC入门案例及相关API概述
  2. aws上负载均衡器标组端口_AWS CloudFormation:目标组没有关联的负载均衡器
  3. java锁_Java锁
  4. hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力
  5. pcf8523_PCF上的Spring Cloud合同和Spring Cloud Services
  6. java 枚举 菜鸟_2个菜鸟Java常量和枚举陷阱
  7. spring依赖注入_Spring的依赖注入陷阱
  8. eclipse 扩展_Eclipse扩展的轻量级集成测试
  9. csrf spring_无状态Spring安全性第1部分:无状态CSRF保护
  10. POI创建的文档具有不同条件的灵活样式