我已经看到了很多关于每次执行不多次伪随机数生成器的建议,但从未附带过彻底的解释.当然,很容易理解为什么以下(C/C++)示例不是一个好主意:
int get_rand() {
srand(time(NULL));
return rand();
}
Run Code Online (Sandbox Code Playgroud)
因为get_rand每秒调用几次会产生重复的结果.
但是下面的例子不是一个可以接受的解决方案吗?
MyRand.h
#ifndef MY_RAND_H
#define MY_RAND_H
class MyRand
{
public:
MyRand();
int get_rand() const;
private:
static unsigned int seed_base;
};
#endif
Run Code Online (Sandbox Code Playgroud)
MyRand.cpp
#include <ctime>
#include <cstdlib>
#include "MyRand.h"
unsigned int MyRand::seed_base = static_cast<unsigned int>(time(NULL));
MyRand::MyRand()
{
srand(seed_base++);
}
int MyRand::get_rand() const
{
return rand();
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <iostream>
#include "MyRand.h"
int main(int argc, char *argv[])
{
for (int i = 0; i < 100; i++)
{
MyRand r;
std::cout …Run Code Online (Sandbox Code Playgroud) 说我有一些python代码:
import random
r=random.random()
Run Code Online (Sandbox Code Playgroud)
从一般来说,种子的价值在哪里?
如果我的操作系统没有随机,那么播种在哪里呢?
为什么不推荐用于加密?有没有办法知道随机数是什么?
我是新手rand.Intn(n int) int,不知道为什么它rand.Intn(n int) int为每次运行打印相同的数字:
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(rand.Intn(10))
}
Run Code Online (Sandbox Code Playgroud)
文档说:
Intn从默认Source返回[0,n]中的非负伪随机数作为int.如果n <= 0则会发生恐慌.
我如何正确播种随机数生成?