为了账号安全,请及时绑定邮箱和手机立即绑定

C的rand()使用哪些常用算法?

C的rand()使用哪些常用算法?

开心每一天1111 2019-09-26 10:36:33
我了解C规范并未提供有关的具体实现的任何规范rand()。在不同的主要平台上通常使用哪些不同的算法?它们有何不同?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

我曾经写过一份关于离散数学的CRNG的报告。为此,我在msvcrt.dll中反汇编了rand():

msvcrt.dll:77C271D8 mov     ecx, [eax+14h]msvcrt.dll:77C271DB imul    ecx, 343FDhmsvcrt.dll:77C271E1 add     ecx, 269EC3hmsvcrt.dll:77C271E7 mov     [eax+14h], ecx
msvcrt.dll:77C271EA mov     eax, ecx
msvcrt.dll:77C271EC shr     eax, 10hmsvcrt.dll:77C271EF and     eax, 7FFFh

所以这是一个LCG,类似(未经测试)...

int ms_rand(int& seed){
  seed = seed*0x343fd+0x269EC3;  // a=214013, b=2531011
  return (seed >> 0x10) & 0x7FFF;}


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 789 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信