📄 subject_39797.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>* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.<BR>*<BR>*Purpose:<BR>* defines rand(), srand() - random number generator<BR>*<BR>*******************************************************************************/<BR><BR>#include <cruntime.h><BR>#include <mtdll.h><BR>#include <stddef.h><BR>#include <stdlib.h><BR><BR>#ifndef _MT<BR>static long holdrand = 1L;<BR>#endif /* _MT */<BR><BR>/***<BR>*void srand(seed) - seed the random number generator<BR>*<BR>*Purpose:<BR>* Seeds the random number generator with the int given. Adapted from the<BR>* BASIC random number generator.<BR>*<BR>*Entry:<BR>* unsigned seed - seed to seed rand # generator with<BR>*<BR>*Exit:<BR>* None.<BR>*<BR>*Exceptions:<BR>*<BR>*******************************************************************************/<BR><BR>void __cdecl srand (<BR> unsigned int seed<BR> )<BR>{<BR>#ifdef _MT<BR><BR> _getptd()->_holdrand = (unsigned long)seed;<BR><BR>#else /* _MT */<BR> holdrand = (long)seed;<BR>#endif /* _MT */<BR>}<BR><BR><BR>/***<BR>*int rand() - returns a random number<BR>*<BR>*Purpose:<BR>* returns a pseudo-random number 0 through 32767.<BR>*<BR>*Entry:<BR>* None.<BR>*<BR>*Exit:<BR>* Returns a pseudo-random number 0 through 32767.<BR>*<BR>*Exceptions:<BR>*<BR>*******************************************************************************/<BR><BR>int __cdecl rand (<BR> void<BR> )<BR>{<BR>#ifdef _MT<BR><BR> _ptiddata ptd = _getptd();<BR><BR> return( ((ptd->_holdrand = ptd->_holdrand * 214013L<BR> + 2531011L) >> 16) & 0x7fff );<BR><BR>#else /* _MT */<BR> return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);<BR>#endif /* _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 + -