找回密码
 欢迎注册
查看: 31759|回复: 18

[讨论] 求随机产生0-2^32-1内整数算法

[复制链接]
发表于 2008-3-17 09:12:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
要求速度快 且满足概率意义上的平均分布 即假设产生100万数据 如果平均切分[0, 2^32-1]区间为10份 则每个区间的数字个数都要接近10万 总偏差不能超过10% 同样道理, 做其他等分切分 则区间分布偏差也要小
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-17 09:36:08 | 显示全部楼层
关于伪随机数的生成,学问很深。 可参考 Donald E. Knuth 的 The Art Of Computer Programming (volume2),即mathe女儿常翻的那本 在这本书里有一段代码,其随机性比较好,上限虽没有楼主要求的那么大, 但也达到了(230-1),比标准C中的 rand() 函数(上限仅(215-1))好了不少。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-17 09:46:25 | 显示全部楼层
我需要的比这个高啊 就要满bit的 呵呵 为了顺便测试那个bit索引算法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-17 09:49:34 | 显示全部楼层
不过通常周期长的伪随机序列计算复杂度也要大一些。 如果为了测试那个bit索引算法,使用太复杂的伪随机序列产生程序,这部分代码所占用时间太长,会对那部分代码的时间测试影响太大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-17 09:51:36 | 显示全部楼层
Cache下来啊 我先填充100万测试数据 实在没办法就用位随机算法产生10万数据先凑合下 头疼位随机的恐怖执行时间
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-17 09:56:13 | 显示全部楼层
产生数据不是问题,使用线性移位寄存器产生M序列应该是一种可取的办法。 不过实现产生100万数据,对内存压力比较大。测试中很多时间是花费在读取内存上的。4Mega的数据通常L2 Cache都会装不下,访问内存花费的时间比例太高了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-17 09:59:48 | 显示全部楼层
那考虑10万的?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-17 10:03:46 | 显示全部楼层
10万应该好一些,通常L2 Cache都应该装的下,不过L1Cache会装不下,但是对于顺序访问,通常硬件会自动做数据预取,但是就不知道对于这种情况会做的多好,毕竟访问L2 Cache的速度还是比较慢的(可能略小于10个时钟周期吧)。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-17 10:05:56 | 显示全部楼层
先写了个位算法 不知可行么 编译去
  1. DWORD BitRandom(void)
  2. {
  3. __asm
  4. {
  5. mov ecx, 31
  6. mov edx, 0
  7. loop1:
  8. call rand
  9. and eax, 1
  10. shl eax, cl
  11. add edx, eax
  12. sub ecx, 1
  13. jnc loop1
  14. mov eax, edx
  15. }
  16. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-17 10:10:14 | 显示全部楼层
call rand占用的时间比例太高。这个很难去评测除掉函数调用以后部分代码占用的时间周期。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-25 01:58 , Processed in 0.027238 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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