查看: 6258|回复: 9

[已解决] 关于random()和randomSeed()在使用上的问题

[复制链接]

该用户从未签到

发表于 2014-6-4 23:31 | 显示全部楼层 |阅读模式
本帖最后由 eko 于 2014-6-12 14:28 编辑

写着写着好像又想通了,又好像没想通,还是要求助,顺便分享一下看法,望指正。

(1)关于 randomSeed()
randomSeed() 根据括号里面的值产生随机数种子。

①randomSeed(x)  (“x”为确定值)
通过为 randomSeed() 设定一确定值来产生随机数种子,将产生一段确定的“随机数”的序列,
我估计在某些特定场合需要用到精确重复的伪随机数,但不知道具体应用。

②randomSeed(analogRead(0))
当模拟引脚("0")悬空时, analogRead(0) 读取模拟噪声
通过每次使用 random() 前调用 randomSeed(analogRead(0)) 读取模拟噪声来产生的随机数种子产生不同的随机数序列,让每次调用 random() 都能从不同的伪随机数序列中取数,从而产生理想的随机数


(2)使用 random() 前的 randomSeed() 是必须的吗?——如果不是,那么作用和区别是什么?

①random()
在一些例程当中,我发现中间没有用 randomSeed() 来做种,而直接用 random() 来产生伪随机数,所以我猜::
在不使用 randomSeed() 的情况下 random()会以某一伪随机数序列来取随机数,但是这唯一的随机数序列不确定是哪一个,所以无法用于上面所说的某些特殊场合;

②使用 random() 前 调用 randomSeed(x)   (“x”为确定值)
如上面所说可以用于特殊场合。

现在的问题是:
还是不确定,不明白使用 random() 前调用和不调用 randomSeed(x) 有什么区别?????抓狂了。

该用户从未签到

 楼主| 发表于 2014-6-8 15:43 | 显示全部楼层
怎么没有人回答{:soso_e109:}

该用户从未签到

 楼主| 发表于 2014-6-12 14:28 | 显示全部楼层
不调用randomSeed或者Seed值相同的话,随机数序列是一样的,只有不同的Seed才会产生不同的随机数序列。

疑惑解除//
  • TA的每日心情
    奋斗
    2015-3-25 08:01
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2014-6-12 14:38 | 显示全部楼层
    我记得学C的时候就是这样说的:想产生随机数,就要先播种,否则产生的随机数是一样的

    该用户从未签到

     楼主| 发表于 2014-6-13 09:16 | 显示全部楼层
    qhdtc5 发表于 2014-6-12 14:38
    我记得学C的时候就是这样说的:想产生随机数,就要先播种,否则产生的随机数是一样的
    ...

    这样解释也是通的,因为每次使用的都是同一随机数序列
  • TA的每日心情
    擦汗
    2020-5-29 16:42
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-5-29 16:27 | 显示全部楼层
    嗯,我看书上也是这么说的,单用random()函数的话,每次运行脚本时,实际上得到的都是相同的数字序列。如果使用randomSeed的话,至少在一定范围内看似是随机的

    该用户从未签到

    发表于 2020-6-4 11:16 | 显示全部楼层
    单独使用random()函数在程序重启之后产生的随机数和之前产生的随机数是相同的,没有严格意义上的产生随机数,而在使用random()函数之前调用randomeed()函数就会每次产生不一样的随机数
  • TA的每日心情
    开心
    2020-7-7 08:31
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2020-6-30 19:03 | 显示全部楼层
    我探索过,如果不用 randomSeed(analogRead(0))随机的效果是非常不完美的,并且使用randomSeed(x) 同意不完美,这说明如果你不用种子是不可以的,使用不好的种子也是不可以的。
    如果你不用种子,random每次产生的随机数总是一样的,如果你用了一个稳定的种子x,那么random产生的随机数换了一个区间,还是每次产生一样的随机数,只有选择了模拟口的白噪声,使得每次产生的随机数都会不同,当然这是一个很大的随机数,总会有重复出现,所以叫做为随机数。
  • TA的每日心情
    开心
    2020-7-7 08:31
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2020-7-2 09:15 来自手机 | 显示全部楼层
    找一个好种子很重要
  • TA的每日心情
    奋斗
    2020-7-8 22:38
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2020-7-2 10:08 | 显示全部楼层
    老张383 发表于 2020-7-2 09:15
    找一个好种子很重要

    取 millis() 來用應該可行吧?
    看要留最小位數的幾位數來當 seed?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    求解用arduino 让WS2812全灯带无特效常亮并做呼吸灯效果
    求解用arduino 让WS2812全
    本人小白,初学arduino,一边逛论坛一边看网上视频教程,看得比较杂 找了很久也没找
    想通过blinker按钮按住常亮灯松手熄灭功能
    想通过blinker按钮按住常
    1.测试了APP里面的开关按键,可以实现按下灯亮再按一下灯灭。2.做第2步测试的时候,想
    新手求助!blinker同步到米家,但手机里的小爱控制不了ESP8266
    新手求助!blinker同步到
    搞了两个晚上还是没解决,请大神帮忙看看 我的手机是苹果手机,下了点灯,米家,小爱
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表