我是编程新手.
我想知道rand()究竟是什么.
仅搜索会生成有关其用法的示例.但没有人解释函数如何生成随机数的每一步.他们将rand()视为黑盒子.
我想知道rand()正在做什么; 每一步.
是否有资源可以让我看到rand()的确切含义? 这是所有开源的东西不是吗?如果没有消息来源,我会解决这个问题.
我知道它会返回一个随机数,但它是如何生成该数字的?我想看看每一步.
谢谢.
我听到一些人说,rand()即使在使用srand()获得种子后,使用也很糟糕。为什么呢?我想知道事情是如何发生的......还有另一个问题很抱歉......但是有什么替代方法呢?
这是一些代码:
#include <iostream>
int main() {
srand(1);
std::cout << rand() << "\n";
srand(UINT_MAX);
std::cout << rand() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
16807
16807
Run Code Online (Sandbox Code Playgroud)
为什么这两种种子产生相同的结果?它们在连续rand()调用中产生的整个值序列也是相同的。可能值的范围太大,因此纯属巧合。是吗:
rand()(如果是这样,我很好奇那可能是什么)(可能相关:种子 10、100、1000、10000 和 100000 分别产生 168070、1680700、16807000、168070000 和 1680700000。)
我跑了一个叫rand()四次的程序.我使用模数运算符将范围限制为1-6.产生的整数分别为2,5,4和2.我重新编程并获得相同的数字.然后我创建了一个全新的程序,也调用了rand()四次,我仍然得到整数序列2,5,4,2.然后我关闭计算机,重新启动,创建另一个新程序,调用rand()四次,仍然得到序列2,5,4,2.
我理解你需要"种子"RNG所需的基础知识srand(),它在不同的点开始序列,但我只是好奇:忘记播种片刻,是由rand()安装,编译器和/或操作系统生成的序列依赖?例如,以下任何一个会导致不同的顺序:
或者只是使用相同RNG算法的所有C编译器的问题,因此伪随机序列(从头开始)对每个人都是相同的?
我听说计算结果对随机数发生器的选择非常敏感.
1我想知道是否与编程自己的Mersenne-Twister或其他伪随机例程相关以获得一个好的数字生成器.另外,我不明白为什么我不应该将本机或库生成器作为numpy中的random.uniform(),在C++中使用rand().据我所知,我可以自己构建生成器,用于除均匀以外的分布(反向重分配函数方法,极坐标方法).但使用一个内置发电机进行均匀采样是不是很邪恶?
2默认的'时间'种子有什么问题?应该重新播种代码样本中的种子和频率(以及为什么)?
3也许你对这些主题有一些很好的联系!
--edit更准确地说,我需要多分量优化例程的随机数,以及统一空间样本来初始化一些其他优化例程参数.我还需要蒙特卡罗方法的随机数(敏感性分析).我希望精确有助于找出问题的范围.
我知道如何实现它.但是,我想了解rand在内部是如何表现的,为什么有必要初始化rand函数的'seed'值.
换句话说 - rand函数如何使用种子值生成随机数?
我只是在C++中编写下面的代码,但我有一个问题:它的随机数始终是相同的.. !! 这是我的代码和截图:
#include <iostream>
using namespace std;
int main() {
cout << "I got a number in my mind... can you guess it?" << endl;
int random;
random = rand() % 20 + 1;
cout << random << endl;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在写函数,我需要找到1到10之间的随机数.最简单的方法之一是使用random()libc调用.我将使用这个功能很多.但我不知道它会有多高效.如果有人知道random()的效率会有帮助吗?
另外我注意到random()在2次运行中给出了相同的模式.
int main()
{
for(int i=0;i<10;i++)
{
cout << random() % 10 << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
输出第一次: - 3 6 7 5 3 5 6 2 9 1
第二次我也得到了相同的输出.
那么它是如何随机的?
random ×8
c++ ×6
c ×3
lcg ×1
linux ×1
performance ×1
probability ×1
python ×1
simulation ×1
srand ×1