当前位置: 首页 > 知识库问答 >
问题:

为什么在srand中使用“时间”?

鲁昕
2023-03-14

我喜欢通过摆弄代码来学习,最近我复制并粘贴了一个随机数生成器代码。然后我删除了所有代码行,这些代码行对于生成一个随机数来说是不必要的。最后一根稻草是我删除了srand中的“时间”。

(无符号) 时间(0));

这里的“时间(0)”是什么意思?

它使用程序打开的时间来生成随机数的种子吗?这就是为什么删除它(时间)会使它不起作用吗?因为它没有种子?

而且

include <stdlib.h> 
include <stdio.h> 
include <time.h>

int main() 
{

srand((unsigned) time(0));

printf("Your dice has been rolled! You got:");

int result = 1 + (rand() % 20);

printf("%d", result);

}

这是整个代码,我注意到它使用“rand”结果进行输出。“兰德”会从“srand”中拔出种子吗?

共有2个答案

孔和畅
2023-03-14

srand的效果不能跨线程,所以随机数种子应该在每个线程上设置一次。@Buddy说使用time(0)是最方便的方法,每次调用都会得到不同的seed.Of当然你可以使用原子变量。

std::atomic<int> seek(2374213);  //init whatever you like
  
void thread1fun()
{
  srand(++seek);
  //...
  int rand_num = rand();
}

void thread2fun()
{
  srand(++seek);
  //...
  int rand_num = rand();
}
蔺弘
2023-03-14

如果不“播种”随机数生成器(或者使用相同的种子值),则会得到相同的伪随机数集。

使用当前时间是每次获得不同种子的简单方法。

 类似资料:
  • 我想在c中对大随机数进行降级。问题是srand()可以生成的最大数字大约是37000。我想在intervall中创建一个70000到2150000000的数字。有人能帮我吗? 随机数生成器:

  • 问题内容: 我正在查看一个串行程序,观察到它们在使用之前先使用过。为什么这是必需的。为什么我们不能直接致电并检查是否失败?另外,为什么要在我已经将文件描述符设置为传递时将文件描述符增加1并传递它呢? 例: fds已经具有fd的值 问题答案: 该系统调用告诉你是否有任何数据的文件描述符你感兴趣的。严格来说,它是文件描述符的读操作是否会阻止或不是一个问题读取。 如果您在文件描述符(例如连接到串行端口的

  • 问题内容: Java不能执行运算符重载,但可以用于和和其他一些类。这怎么可能? 更新: 为什么这样做? 问题答案: 不是操作员重载的示例。在语言中被内置为合并运算符 和 算术加法运算符。 这意味着用Java编写程序的人不能重载运算符,但是就Java语言的语法而言,它被定义为连接和加法运算符。 编辑 它适用于其他类,如和由于自动装箱。 如果您看一下执行字符串连接的Java程序的字节码,您会发现它创建

  • 当我阅读mapstruct文档时,他们说:mapstruct是一个Java注释处理器,用于生成类型安全的bean映射类。 https://mapstruct.org/documentation/stable/reference/html/#introduction 这就剩下我的任务了。为什么我需要mapstruct?Jhipster使用它,我不知道他们为什么首先需要它?为什么你需要Jhipster

  • 问题内容: 什么是Unix时间戳?在PHP中,使用日期时,该函数输出一些整数值- 那是什么?我尝试了解这一点,但无法获得满意的答案,尤其是为什么我们需要使用转换日期。 问题答案: 什么是Unix时间戳 简而言之,Unix时间戳是一种跟踪时间(以秒为单位)的方式。此计数从1970年1月1日UTC的Unix Epoch开始。因此, Unix时间戳仅仅是特定日期和Unix Epoch之间的秒数 。还应该

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制