gpt4 book ai didi

c++ - 哪种方法最适合生成随机数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:14 25 4
gpt4 key购买 nike

哪种方法最适合生成随机 2 位数字(仅使用标准 C++ 库)?这 2 个似乎是最明显的,但我想知道哪个更好,是否有更好的。

//1
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
std::srand(std::time(NULL));
std::cout << "Random value: " << std::rand() % 100;
return 0;
}

//2
#include <iostream>
#include <random>
int main()
{
std::random_device rnd;
std::cout << "Random value: " << rnd() % 100;
return 0;
}

最佳答案

这两个都不是很好。您想要一个不太可预测的种子(srand/rand 做不到)和均匀分布(% 100 几乎任何东西都做不到)。

相反,使用 C++11 标准 <random> PRNG 套件(改编自 cppreference example code ):

int main()
{
// Seed with a real random value, if available
std::random_device r;

// Seed the default ending from good random
std::default_random_engine eng(r());

// Define a proper distribution that won't exhibit bias
std::uniform_int_distribution<int> dist(0, 99);

std::cout << "Random value: " << dist(eng) << std::endl;
}

从技术上讲,std::random_device 上的标准有点弱并允许它是非加密随机的,但在所有主要操作系统上它应该是体面的。欢迎您异或r()time(NULL)如果你想确保它至少是非重复的,尽管它不能保证良好的随机性。

关于c++ - 哪种方法最适合生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55717811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com