我了解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;}
添加回答
舉報
0/150
提交
取消