QRandomGenerator使用当前时间作为种子能否生成随机数而非伪随机
时间: 2023-07-04 11:03:31 浏览: 66
QRandomGenerator使用当前时间作为种子,生成的随机数仍然是伪随机数,而不是真正的随机数。因为计算机系统的运行是可预测的,尤其是在处理大量数据时,生成的随机数很容易被猜测或预测,因此需要使用更复杂的算法和更强的随机源来生成真正的随机数。如果需要生成真正的随机数,可以使用硬件随机数生成器(如硬件随机数生成器芯片)或从外部随机源获取数据。
相关问题
给出以系统时间作为种子且不使用任何头文件的C语言随机数生成函数
以下是一个以系统时间作为种子且不使用任何头文件的C语言随机数生成函数的示例代码:
```c
// 定义一个全局变量用于保存种子值
unsigned int seed = 0;
// 获取系统时间的函数
unsigned int getTime() {
unsigned int time = 0;
// 通过汇编嵌入获取系统时间
asm volatile("rdtsc" : "=a"(time));
return time;
}
// 生成随机数的函数
int generateRandomNumber() {
// 使用系统时间作为种子
if (seed == 0) {
seed = getTime();
}
// 线性同余法生成伪随机数
seed = (seed * 1103515245 + 12345) % (1 << 31);
return seed;
}
int main() {
int random_num = generateRandomNumber();
// 打印随机数
printf("Random number: %d\n", random_num);
return 0;
}
```
在上面的示例中,我们定义了一个全局变量 `seed` 来保存种子值。然后,我们使用 `getTime()` 函数获取系统时间,并将其作为种子值。
接下来,我们使用线性同余法生成伪随机数。具体而言,我们使用公式 `seed = (seed * 1103515245 + 12345) % (1 << 31)` 来更新种子值,并返回该值作为生成的随机数。
在 `main()` 函数中,我们调用 `generateRandomNumber()` 函数来生成随机数,并将其赋值给 `random_num` 变量。最后,我们使用 `printf` 函数打印出生成的随机数。
请注意,由于这是一个简单的示例,使用的是伪随机数生成算法,并且没有考虑到种子的周期性和重复性问题。如果需要更强大和高质量的随机数生成,请考虑使用标准库提供的函数,如前面示例中所示。
生成随机数_浅析MT19937伪随机数生成算法
MT19937是一种伪随机数生成算法,它可以生成高质量的随机数序列。下面是MT19937算法的简要浅析:
MT19937算法的核心是一个624维的状态向量,每次生成随机数时,算法会根据这个状态向量生成一个随机数,并且更新状态向量。状态向量的初始值可以通过一个种子(seed)来确定,种子可以是任意的整数。
在生成随机数时,算法会先将状态向量中的624个数进行一次变换,然后取其中的一个数作为生成的随机数。变换的具体过程为:对于每个数i(0<=i<=623),算法会将状态向量中的第i个数、第(i+1)%624个数、第(i+397)%624个数、以及第(i+396)%624个数进行一系列运算,得到一个新的数。这个新的数会替换原来的第i个数,从而更新了状态向量。
MT19937算法的优点是生成的随机数序列很长,且随机性好,可以满足大多数应用场景的需要。但是,由于MT19937算法是伪随机数生成算法,因此生成的随机数序列并不是真正的随机数序列,而是一种伪随机数序列。如果需要生成高质量的真正随机数序列,需要使用一些硬件随机数生成器。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)