但往往,这是不需要的

如果你运行上面多次rand()示例程序,你会发现它打印相同的结果,每一次!这意味着,而在序列中的每一个数字似乎是随机的,与以前的,整个序列是不是随机的!这意味着我们的计划结束完全可预测的(相同的输入导致相同的输出每次)。有情况下,这可能是有用的,甚至是所需的(例如,你希望一个科学模拟是可重复的,或你试图调试为什么你的随机地牢发电机崩溃)。
但往往,这是不需要的。如果你正在写一个喜罗游戏(用户有10个试图猜测一个数字,和电脑告诉他们,他们的猜测是太高或太低),你不希望该程序在每次选择相同的数字。所以让我们更深地看一下为什么会发生,以及我们如何能够解决它。
记得在一个PRNG序列中的每个数从以前的生成数量,以确定的方式。因此,任何从种子数,伪随机数发生器总是生成相同的数字序列从种子的结果!我们得到相同的序列,因为我们的起始种子号总是5323。
为了使我们的整个序列随机,我们需要一些方法来选择一个不是一个固定数量的种子。可能想到的第一个答案是,我们需要一个随机数!这是一个很好的想法,但如果我们需要一个随机数产生随机数,然后我们在一个左右为难。事实证明,我们真的不需要我们的种子是一个随机数-我们只需要选择的东西,每次程序运行时的变化。然后我们可以使用我们的PRNG从种子生成一个唯一的伪随机数序列。
做这件事的普遍接受的方法是登记系统时钟。每次用户运行程序时,时间会有所不同。如果我们使用这个时间值作为我们的种子,那么我们的程序将产生一个不同的数字序列,每次运行!
C自带的函数称为time()返回秒数自1970年1月1日午夜。使用它,我们只需要包含CTime头,然后初始化srand()打电话的时间(0)。

这是同样的程序,调用time()作为种子:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime> // for time()
 
int main()
{
    srand(static_cast<unsigned int>(time(0))); // set initial seed value to system clock
 
    for (int count=0; count < 100; ++count)
    {
        std::cout << rand() << "\t";
 
        // If we've printed 5 numbers, start a new row
        if ((count+1) % 5 == 0)
            std::cout << "\n";
	}
}
现在我们的程序将产生一个不同的随机数序列!运行它几次,看看自己。
在给定范围内产生随机数
一般来说,我们不希望随机数的0和rand_max之间--我们希望其他两值之间的数字,我们可以称之为最小和最大。例如,如果我们试图模拟用户滚动一死,我们希望1和6之间的随机数(迂腐的语法笔记:是的,死是骰子的奇异)。
这里是一个简短的函数,将rand()结果到距离我们想要的:

1
2
3
4
5
6
7
8
// Generate a random number between min and max (inclusive)
// Assumes srand() has already been called
int getRandomNumber(int min, int max)
{
    static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);  // static used for efficiency, so we only calculate this value once
    // evenly distribute the random number across our range
    return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;、本 3项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReadmE.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、资 1源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READMe.m文件(如d有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值