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

我了解C规范并未提供有关的具体实现的任何规范rand()。在不同的主要平台上通常使用哪些不同的算法?它们有何不同?



开心每一天1111
浏览 796回答 3
3回答

缥缈止盈

我曾经写过一份关于离散数学的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;}
打开App,查看更多内容
随时随地看视频慕课网APP