如何知道rand当前的种子

fanshunguo 2012-04-10 11:29:28
用rand生成为随机数:
srand(seed);
rand();
rand();
如何得到第二个rand的种子
求助,急用,谢谢!
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanshunguo 2012-04-12
  • 打赏
  • 举报
回复
恩,我把括号看错了[Quote=引用 9 楼 的回复:]

第二个用的种子是 前一个种子 * 214013L+ 2531011L;
LZ仔细分析一下这句:
return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );

注意里面的括号嵌套。
[/Quote]
loongee 2012-04-10
  • 打赏
  • 举报
回复
第二个用的种子是 前一个种子 * 214013L+ 2531011L;
LZ仔细分析一下这句:
return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );

注意里面的括号嵌套。
fanshunguo 2012-04-10
  • 打赏
  • 举报
回复
还是不对,第二个rand用的种子不是简单的利用第一个的结果[Quote=引用 7 楼 的回复:]

谢谢了,已解决引用 3 楼 的回复:

参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
C/C++ code
/***
*rand.c - random number generator
*
* Copyright (c) Microsoft Corporation. All righ……
[/Quote]
fanshunguo 2012-04-10
  • 打赏
  • 举报
回复
谢谢了,已解决[Quote=引用 3 楼 的回复:]

参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
C/C++ code
/***
*rand.c - random number generator
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*……
[/Quote]
cbzjzsb123 2012-04-10
  • 打赏
  • 举报
回复
fanshunguo 2012-04-10
  • 打赏
  • 举报
回复
我的意思是如何得到一个新的seed1满足:
srand(seed1);
rand();
此时得到的伪随机数等于第二个rand()[Quote=引用 2 楼 的回复:]

楼上正解.
[/Quote]
fanshunguo 2012-04-10
  • 打赏
  • 举报
回复
我的意思是如何得到一个新的seed1满足:
srand(seed1);
rand();
此时得到的为随机数等于第二个rand()[Quote=引用 1 楼 的回复:]

第2个rand也是用srand的种子
[/Quote]
赵4老师 2012-04-10
  • 打赏
  • 举报
回复
参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c
/***
*rand.c - random number generator
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines rand(), srand() - random number generator
*
*******************************************************************************/

#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>

/***
*void srand(seed) - seed the random number generator
*
*Purpose:
* Seeds the random number generator with the int given. Adapted from the
* BASIC random number generator.
*
*Entry:
* unsigned seed - seed to seed rand # generator with
*
*Exit:
* None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
unsigned int seed
)
{
_getptd()->_holdrand = (unsigned long)seed;
}


/***
*int rand() - returns a random number
*
*Purpose:
* returns a pseudo-random number 0 through 32767.
*
*Entry:
* None.
*
*Exit:
* Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
void
)
{
_ptiddata ptd = _getptd();

return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );
}
忘世麒麟 2012-04-10
  • 打赏
  • 举报
回复
楼上正解.
Kaile 2012-04-10
  • 打赏
  • 举报
回复
第2个rand也是用srand的种子

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧