使用 Xcode 在 Mac 上用 c++ 生成随机数时遇到问题
Trouble generating random numbers in c++ on a Mac using Xcode
我正在编写一个以不同方式广泛使用随机数的程序,并且我每次都得到相同的随机数。我知道将 srand(time(NULL));
放在程序的开头以播种随机数生成器,所以我有它,但它不起作用。也许它与 XCode 或 Mac 或其他什么有关?我在网上找不到类似的问题,我有一个我还没有尝试过的解决方案。我使用随机数的一些方法是:
for (int i=0; i<num; i++)
{
chrom_arr[i] = i;
}
random_shuffle(&chrom_arr[0], &chrom_arr[num-1]);
(获取一个包含一系列介于 0 和 num-1 之间的随机整数的数组)
int crossover = rand() % num;
和其他类似的简单事情。即使我开头有 srand(time(NULL));
,它仍然不起作用。我也试过 srand(time(0));
并将它放在程序的不同部分,但后来我知道这是不对的。
Alex,你能不能 post 一个小而完整的程序,每次你 运行 它都无法生成不同的随机数?我很想看看...
这是一个(当然)确实每次在我的Mac上运行产生不同的数字:
#include <iostream>
#include <ctime>
#include <cstdlib>
int main()
{
srand(time(NULL));
for (int i = 0; i < 10; ++i)
std::cout << rand() % 10 << std::endl;
return 0;
}
如果在计算机上多次编译并 运行 它会做什么?
更新:
我以为你的意思是 srand()
+ rand()
也 每次都产生相同的数字。那不是真的。但是,您对 srand()
+ random_shuffle()
的行为是正确的:它确实可能每次都产生相同的数字,具体取决于您的编译器。它也适用于我的编译器(Mac 上的 clang)。
这是解释here。
你应该尝试这样的事情:
srand(static_cast<unsigned int>(time(0)));
std::shuffle(chrom_arr.begin(), chrom_arr.end(), default_random_engine(rand()));
只要 chrom_arr
是 std::vector
,这就会起作用。一旦您使用了 C++,我认为这就是您想要做的。
我正在编写一个以不同方式广泛使用随机数的程序,并且我每次都得到相同的随机数。我知道将 srand(time(NULL));
放在程序的开头以播种随机数生成器,所以我有它,但它不起作用。也许它与 XCode 或 Mac 或其他什么有关?我在网上找不到类似的问题,我有一个我还没有尝试过的解决方案。我使用随机数的一些方法是:
for (int i=0; i<num; i++)
{
chrom_arr[i] = i;
}
random_shuffle(&chrom_arr[0], &chrom_arr[num-1]);
(获取一个包含一系列介于 0 和 num-1 之间的随机整数的数组)
int crossover = rand() % num;
和其他类似的简单事情。即使我开头有 srand(time(NULL));
,它仍然不起作用。我也试过 srand(time(0));
并将它放在程序的不同部分,但后来我知道这是不对的。
Alex,你能不能 post 一个小而完整的程序,每次你 运行 它都无法生成不同的随机数?我很想看看...
这是一个(当然)确实每次在我的Mac上运行产生不同的数字:
#include <iostream>
#include <ctime>
#include <cstdlib>
int main()
{
srand(time(NULL));
for (int i = 0; i < 10; ++i)
std::cout << rand() % 10 << std::endl;
return 0;
}
如果在计算机上多次编译并 运行 它会做什么?
更新:
我以为你的意思是 srand()
+ rand()
也 每次都产生相同的数字。那不是真的。但是,您对 srand()
+ random_shuffle()
的行为是正确的:它确实可能每次都产生相同的数字,具体取决于您的编译器。它也适用于我的编译器(Mac 上的 clang)。
这是解释here。
你应该尝试这样的事情:
srand(static_cast<unsigned int>(time(0)));
std::shuffle(chrom_arr.begin(), chrom_arr.end(), default_random_engine(rand()));
只要 chrom_arr
是 std::vector
,这就会起作用。一旦您使用了 C++,我认为这就是您想要做的。