设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

求个优化的随机数算法

查看数: 4864 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-3-31 22:22

正文摘要:

咱会用的随机写法就是rand  但是这个有个缺陷, 就是当它在循环调用的情况下, 随机出来的数值非常接近.... 如图, 咱模仿火纹的升级系统, 升级时候的属性点根据成长度随机增加 然而, 尽管成长度不同, ...

回复

灯笼菜刀王 发表于 2018-4-2 11:04:48

非常感谢, 我试试看~
guoxiaomi 发表于 2018-4-2 10:12:24
灯笼菜刀王 发表于 2018-4-1 13:11
非常感谢, 不过,有看没有懂....  知道其然而不知其所以然......

位运算这个等级对咱来说还是太 ...

  1. $rand = Net_Rand.new(Time.now.to_f)
  2. $rand.update # => 0~1之间的随机小数
  3. $rand.update(100) # => 0~99之间的随机整数
  4. $rand.reset(Time.now.to_f) # => 利用当前时间重置随机数种子
复制代码

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 被醋瞎
灯笼菜刀王 + 1 认可答案

查看全部评分

灯笼菜刀王 发表于 2018-4-1 13:11:31
guoxiaomi 发表于 2018-4-1 11:52
当年为了伪随机同步随便写了个,反正肯定没有直接srand,rand靠谱,你可以参考一下思路。 ...

非常感谢, 不过,有看没有懂....  知道其然而不知其所以然......

位运算这个等级对咱来说还是太高端了些......

咱目前是用一堆没有逻辑概念的变量乱七八糟的海算一通,然后筛选适合的数值塞到一个数组里...  然后循环rand一个出来, 只要它和前面抽的数差距在10以外, 就return出来当做结果......
guoxiaomi 发表于 2018-4-1 11:52:48
本帖最后由 guoxiaomi 于 2018-4-1 11:53 编辑
  1. #--------------------------------------------------
  2. # Net_Rand
  3. #--------------------------------------------------
  4. class Net_Rand
  5.   def initialize(seed = '0000')
  6.     reset(seed)
  7.   end

  8.   def update(i = nil)
  9.     @result = Zlib::crc32((@seed ^ @result).to_s(16))
  10.     return (i ? @result * i : @result.to_f) / (1 << 32)
  11.   end

  12.   def reset(seed = '0000')
  13.     @seed = Zlib::crc32(seed.to_s)
  14.     @result = 0
  15.   end
  16. end
复制代码

当年为了伪随机同步随便写了个,反正肯定没有直接srand,rand靠谱,你可以参考一下思路。

评分

参与人数 1+1 收起 理由
灯笼菜刀王 + 1 精品文章

查看全部评分

灯笼菜刀王 发表于 2018-4-1 11:11:13
SailCat 发表于 2018-4-1 10:27
rand (65) + rand(35)这写法真是亮瞎了……

理论上讲rand(65)+rand(35)的期望值和rand(10)+rand(90)以及ra ...

因为不知道rand的的工作原理, 猜想如果是使用乱数的话,那多rand几次就能多消耗几个乱数, 借此增加随机出来的范围咯
SailCat 发表于 2018-4-1 10:27:40
rand (65) + rand(35)这写法真是亮瞎了……

理论上讲rand(65)+rand(35)的期望值和rand(10)+rand(90)以及rand(100)一样,都是50……
yagami 发表于 2018-3-31 23:01:31
每次循环种子变更 比如以当前时间/i 作为种子

评分

参与人数 1+1 收起 理由
灯笼菜刀王 + 1 认可答案

查看全部评分

灯笼菜刀王 发表于 2018-3-31 22:54:19
ikki 发表于 2018-3-31 22:46
只有下载下来将我那个工程全部弄明白才会有很大的提升,还有就是作为从06年到现在的来说,看懂这个10年前的 ...

现在在尝试一个方法,  先生成一组0-100的随机数组,然后再随机提取其中一个作为种子...... 不知道这种方法效果如何
ikki 发表于 2018-3-31 22:46:14
只有下载下来将我那个工程全部弄明白才会有很大的提升,还有就是作为从06年到现在的来说,看懂这个10年前的工程还是不成问题的。

评分

参与人数 1+1 收起 理由
灯笼菜刀王 + 1 我很赞同

查看全部评分

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 18:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表