⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 随机数的产生原理与实现 老罗的缤纷天地.htm

📁 测试各种排序算法,使用VC.NET进行开发
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      color=#3080ca>=</FONT> WM_COMMAND<BR><A 
      name=L52>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> <FONT color=#ff0000>eax</FONT><FONT 
      color=#9932cd><B>,</B></FONT> wParam<BR><A 
      name=L53>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> <FONT color=#ff0000>edx</FONT><FONT 
      color=#9932cd><B>,</B></FONT> <FONT color=#ff0000>eax</FONT><BR><A 
      name=L54>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>shr</FONT> <FONT color=#ff0000>edx</FONT><FONT 
      color=#9932cd><B>,</B></FONT> <FONT color=#802000>16</FONT><BR><A 
      name=L55>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>movzx</FONT> <FONT color=#ff0000>eax</FONT><FONT 
      color=#9932cd><B>,</B></FONT> <FONT color=#ff0000>ax</FONT><BR><A 
      name=L56>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>if</FONT> <FONT 
      color=#ff0000>edx</FONT> <FONT color=#3080ca>=</FONT><FONT 
      color=#3080ca>=</FONT> BN_CLICKED<BR><A 
      name=L57>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>if</FONT> <FONT 
      color=#ff0000>eax</FONT> <FONT color=#3080ca>=</FONT><FONT 
      color=#3080ca>=</FONT> IDCANCEL<BR><A 
      name=L58>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> EndDialog<FONT color=#9932cd><B>,</B></FONT> 
      hWnd<FONT color=#9932cd><B>,</B></FONT> NULL<BR><A 
      name=L59>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>elseif</FONT> <FONT 
      color=#ff0000>eax</FONT> <FONT color=#3080ca>=</FONT><FONT 
      color=#3080ca>=</FONT> IDC_BUTTON_GENERATE <FONT 
      color=#3080ca>|</FONT><FONT color=#3080ca>|</FONT> <FONT 
      color=#ff0000>eax</FONT> <FONT color=#3080ca>=</FONT><FONT 
      color=#3080ca>=</FONT> IDOK<BR><A 
      name=L60>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>;获得上限:</FONT><BR><A 
      name=L61>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> GetDlgItemInt<FONT 
      color=#9932cd><B>,</B></FONT> hWnd<FONT color=#9932cd><B>,</B></FONT> 
      IDC_EDIT_FIRST<FONT color=#9932cd><B>,</B></FONT> NULL<FONT 
      color=#9932cd><B>,</B></FONT> TRUE<BR><A 
      name=L62>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> nFirst<FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#ff0000>eax</FONT><BR><A 
      name=L63>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>;获得下限:</FONT><BR><A 
      name=L64>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> GetDlgItemInt<FONT 
      color=#9932cd><B>,</B></FONT> hWnd<FONT color=#9932cd><B>,</B></FONT> 
      IDC_EDIT_SECOND<FONT color=#9932cd><B>,</B></FONT> NULL<FONT 
      color=#9932cd><B>,</B></FONT> TRUE<BR><A 
      name=L65>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> nSecond<FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#ff0000>eax</FONT><BR><A 
      name=L66>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>;产生随机数:</FONT><BR><A 
      name=L67>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> iRand<FONT color=#9932cd><B>,</B></FONT> 
      nFirst<FONT color=#9932cd><B>,</B></FONT> nSecond<BR><A 
      name=L68>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>;输出:</FONT><BR><A 
      name=L69>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> wsprintf<FONT color=#9932cd><B>,</B></FONT> 
      <FONT color=#ff0000>addr</FONT> szText<FONT color=#9932cd><B>,</B></FONT> 
      <FONT color=#ff0000>addr</FONT> szTemplate<FONT 
      color=#9932cd><B>,</B></FONT> nFirst<FONT color=#9932cd><B>,</B></FONT> 
      nSecond<FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#ff0000>eax</FONT><BR><A 
      name=L70>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>invoke</FONT> MessageBox<FONT color=#9932cd><B>,</B></FONT> 
      hWnd<FONT color=#9932cd><B>,</B></FONT> <FONT color=#ff0000>addr</FONT> 
      szText<FONT color=#9932cd><B>,</B></FONT> <FONT color=#ff0000>addr</FONT> 
      szCaption<FONT color=#9932cd><B>,</B></FONT> MB_OK <FONT 
      color=#ff0000>or</FONT> MB_ICONINFORMATION<BR><A 
      name=L71>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>endif</FONT><BR><A 
      name=L72>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>endif</FONT><BR><A 
      name=L73>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#9932cd><B>.</B></FONT><FONT 
      color=#ff0000>else</FONT><BR><A 
      name=L74>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> <FONT color=#ff0000>eax</FONT><FONT 
      color=#9932cd><B>,</B></FONT> FALSE<BR><A 
      name=L75>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>ret</FONT><BR><A name=L76>&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#9932cd><B>.</B></FONT><FONT color=#ff0000>endif</FONT><BR><A 
      name=L77>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>mov</FONT> <FONT 
      color=#ff0000>eax</FONT><FONT color=#9932cd><B>,</B></FONT> TRUE<BR><A 
      name=L78>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>ret</FONT><BR><A 
      name=L79>WndProc <FONT color=#ff0000>endp</FONT><BR><A name=L80><BR><A 
      name=L81><FONT 
      color=#238e23>;**********************************************************************</FONT><BR><A 
      name=L82><FONT color=#238e23>; 函数功能:产生范围从 first 到 second 的随机数</FONT><BR><A 
      name=L83><FONT color=#238e23>; 传入参数:</FONT><BR><A name=L84><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      first&nbsp;&nbsp;= 下限</FONT><BR><A name=L85><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      second = 上限</FONT><BR><A name=L86><FONT color=#238e23>; 返回参数:</FONT><BR><A 
      name=L87><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      eax = Rand_Number</FONT><BR><A name=L88><FONT color=#238e23>; 
      所用公式:</FONT><BR><A name=L89><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Rand_Number = (Rand_Seed * X + Y) mod Z</FONT><BR><A name=L90><FONT 
      color=#238e23>; 补充说明:</FONT><BR><A name=L91><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      (1)本例中用 GetTickCount 来取得随机数种子,</FONT><BR><A name=L92><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在实际应用中,可用别的方法代替。</FONT><BR><A 
      name=L93><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      (2)要产生随机数,X和Y其中之一必须是素数,</FONT><BR><A name=L94><FONT 
      color=#238e23>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所以 
      X = 23, Y = 7(可用别的素数代替)</FONT><BR><A name=L95><FONT 
      color=#238e23>;**********************************************************************</FONT><BR><A 
      name=L96>iRand&nbsp;&nbsp; <FONT color=#ff0000>proc</FONT> <FONT 
      color=#ff0000>uses</FONT> <FONT color=#ff0000>ecx</FONT> <FONT 
      color=#ff0000>edx</FONT> first<FONT color=#3080ca>:</FONT><FONT 
      color=#ff0000>DWORD</FONT><FONT color=#9932cd><B>,</B></FONT> second<FONT 
      color=#3080ca>:</FONT><FONT color=#ff0000>DWORD</FONT><BR><A 
      name=L97>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>invoke</FONT> 
      GetTickCount <FONT color=#238e23>; 取得随机数种子,当然,可用别的方法代替</FONT><BR><A 
      name=L98>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>mov</FONT> <FONT 
      color=#ff0000>ecx</FONT><FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#802000>23</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#238e23>; X = ecx = 23</FONT><BR><A 
      name=L99>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>mul</FONT> <FONT 
      color=#ff0000>ecx</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#238e23>; eax = eax * X</FONT><BR><A 
      name=L100>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>add</FONT> <FONT 
      color=#ff0000>eax</FONT><FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#802000>7</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>; eax = eax + Y (Y = 7)</FONT><BR><A 
      name=L101>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>mov</FONT> <FONT 
      color=#ff0000>ecx</FONT><FONT color=#9932cd><B>,</B></FONT> 
      second&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#238e23>; ecx = 上限</FONT><BR><A 
      name=L102>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>sub</FONT> <FONT 
      color=#ff0000>ecx</FONT><FONT color=#9932cd><B>,</B></FONT> 
      first&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#238e23>; ecx = 上限 - 
      下限</FONT><BR><A name=L103>&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>inc</FONT> <FONT 
      color=#ff0000>ecx</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#238e23>; Z = ecx + 1 (得到了范围)</FONT><BR><A 
      name=L104>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>xor</FONT> <FONT 
      color=#ff0000>edx</FONT><FONT color=#9932cd><B>,</B></FONT> <FONT 
      color=#ff0000>edx</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>; edx = 0</FONT><BR><A 
      name=L105>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>div</FONT> <FONT 
      color=#ff0000>ecx</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#238e23>; eax = eax mod Z (余数在edx里面)</FONT><BR><A 
      name=L106>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>add</FONT> <FONT 
      color=#ff0000>edx</FONT><FONT color=#9932cd><B>,</B></FONT> 
      first&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#238e23>; 
      修正产生的随机数的范围</FONT><BR><A name=L107>&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#ff0000>mov</FONT> <FONT color=#ff0000>eax</FONT><FONT 
      color=#9932cd><B>,</B></FONT> <FONT 
      color=#ff0000>edx</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      color=#238e23>; eax = Rand_Number</FONT><BR><A 
      name=L108>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>ret</FONT><BR><A 
      name=L109>iRand&nbsp;&nbsp; <FONT color=#ff0000>endp</FONT><BR><A 
      name=L110><BR><A name=L111><FONT color=#ff0000>end</FONT> main<BR><A 
      name=L112><FONT color=#238e23>;********************&nbsp;&nbsp; 
      over&nbsp;&nbsp;&nbsp;&nbsp;********************</FONT><BR><A 
      name=L113><FONT color=#238e23>;by 
LC</FONT></A></TD></TR></TBODY></TABLE><BR>它的资源文件:<BR><BR>
<TABLE cellSpacing=0 cellPadding=0 bgColor=#fbedbb border=0>
  <TBODY>
  <TR>
    <TD>#include "resource.h"<BR><BR>#define IDC_BUTTON_GENERATE 
      3000<BR>#define 
      IDC_EDIT_FIRST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3001<BR>#define 
      IDC_EDIT_SECOND&nbsp;&nbsp;&nbsp;&nbsp; 3002<BR>#define 
      IDC_STATIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1<BR><BR>LC_DIALOG 
      DIALOGEX 10, 10, 210, 60<BR>STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX 
      | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<BR>CAPTION "Rand Number Generator 
      by LC, 2002-11-21"<BR>FONT 8, "MS Sans 
      Serif"<BR>BEGIN<BR>&nbsp;&nbsp;&nbsp;&nbsp;LTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      "Please input the range below:", IDC_STATIC, 5, 5, 200, 
      10<BR>&nbsp;&nbsp;&nbsp;&nbsp;RTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      "From:", IDC_STATIC, 10, 20, 20, 
      10<BR>&nbsp;&nbsp;&nbsp;&nbsp;EDITTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDC_EDIT_FIRST, 
      30, 20, 70, 10, ES_AUTOHSCROLL | NOT WS_BORDER, 
      WS_EX_STATICEDGE<BR>&nbsp;&nbsp;&nbsp;&nbsp;RTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      "To:", IDC_STATIC, 110, 20, 20, 
      10<BR>&nbsp;&nbsp;&nbsp;&nbsp;EDITTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDC_EDIT_SECOND, 
      130, 20, 70, 10, ES_AUTOHSCROLL | NOT WS_BORDER, 
      WS_EX_STATICEDGE<BR>&nbsp;&nbsp;&nbsp;&nbsp;DEFPUSHBUTTON&nbsp;&nbsp; 
      "Generate(&amp;G)", IDC_BUTTON_GENERATE, 70, 40, 50, 13, BS_FLAT | 
      BS_CENTER<BR>END</TD></TR></TBODY></TABLE><BR><BR><B>如果您还有什么疑问,或者发现了我的表述和理解有误,欢迎来信交流。<A 
title=欢迎来信交流! 
href="mailto:lcother@163.net?subject=老罗,有关随机数的问题想跟你探讨。">mailto:lcother@163.net?subject=老罗,有关随机数的问题想跟你探讨。</A></B> 
</P>
<P align=right>老罗<BR>2002-11-22 </P><!-- Page published by Emacs Wiki ends here -->
<DIV class=navfoot>
<HR>

<TABLE width="100%" summary="Footer navigation" border=0>
  <TBODY>
  <TR>
    <TD align=left width="33%"><SPAN class=footdate>版权所有 转载请注明出处</SPAN> </TD>
    <TD align=middle width="34%"><SPAN class=foothome><A 
      href="http://www.luocong.com/">Home</A> / <A 
      href="http://www.luocong.com/articles/WikiIndex.htm">Index</A> </SPAN></TD>
    <TD align=right width="33%"><SPAN class=footfeed><A 
      href="http://www.luocong.com/" target=_blank>罗聪</A></SPAN> 
</TD></TR></TBODY></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -