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

📄 subject_39797.htm

📁 vc
💻 HTM
字号:
<p>
序号:39797 发表者:王莹 发表日期:2003-05-13 19:42:55
<br>主题:rand()函数一问
<br>内容:我需要一个随机数产生函数,范围是从0到0xffffff,可是编译器提供的最大值是0x7fff,我在函数中这样写:<BR> #ifdef RAND_MAX<BR> #undef RAND_MAX<BR> #endif<BR> #define RAND_MAX 0xffffff<BR>然后再调用rand(),可是没有起作用,产生的最大值还是0x7fff。<BR><BR>我该怎么办?:(
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Justin Le 回复日期:2003-05-13 19:50:23
<br>内容:rand() * (0xffffff/0x7fff)<BR><BR>//你看可以吗
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-13 20:04:29
<br>内容:/***<BR>*rand.c - random number generator<BR>*<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.<BR>*<BR>*Purpose:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defines rand(), srand() - random number generator<BR>*<BR>*******************************************************************************/<BR><BR>#include &lt;cruntime.h&gt;<BR>#include &lt;mtdll.h&gt;<BR>#include &lt;stddef.h&gt;<BR>#include &lt;stdlib.h&gt;<BR><BR>#ifndef _MT<BR>static long holdrand = 1L;<BR>#endif&nbsp;&nbsp;/* _MT */<BR><BR>/***<BR>*void srand(seed) - seed the random number generator<BR>*<BR>*Purpose:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Seeds the random number generator with the int given.&nbsp;&nbsp;Adapted from the<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BASIC random number generator.<BR>*<BR>*Entry:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned seed - seed to seed rand # generator with<BR>*<BR>*Exit:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None.<BR>*<BR>*Exceptions:<BR>*<BR>*******************************************************************************/<BR><BR>void __cdecl srand (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int seed<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<BR>{<BR>#ifdef _MT<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_getptd()-&gt;_holdrand = (unsigned long)seed;<BR><BR>#else&nbsp;&nbsp;/* _MT */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;holdrand = (long)seed;<BR>#endif&nbsp;&nbsp;/* _MT */<BR>}<BR><BR><BR>/***<BR>*int rand() - returns a random number<BR>*<BR>*Purpose:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returns a pseudo-random number 0 through 32767.<BR>*<BR>*Entry:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None.<BR>*<BR>*Exit:<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Returns a pseudo-random number 0 through 32767.<BR>*<BR>*Exceptions:<BR>*<BR>*******************************************************************************/<BR><BR>int __cdecl rand (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<BR>{<BR>#ifdef _MT<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ptiddata ptd = _getptd();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return( ((ptd-&gt;_holdrand = ptd-&gt;_holdrand * 214013L<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ 2531011L) &gt;&gt; 16) &amp; 0x7fff );<BR><BR>#else&nbsp;&nbsp;/* _MT */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(((holdrand = holdrand * 214013L + 2531011L) &gt;&gt; 16) &amp; 0x7fff);<BR>#endif&nbsp;&nbsp;/* _MT */<BR>}<BR><BR>// 上面是 MS CRT 的源代码,自己可以看看他的实现,写一个新的函数,比如 rand64()
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-05-13 20:13:13
<br>内容:还有一个方法,把 0xFFFFFF分成几段,可以用3个0xFF 表示,<BR>这样子,调用3次rand把结果用位操作结合起来即可。<BR>2003-5-13 21:13:52

⌨️ 快捷键说明

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