在Mac上使用Xcode用c++生成随机数的问题

Trouble generating random numbers in c++ on a Mac using Xcode

本文关键字:随机数 问题 Xcode Mac c++      更新时间:2023-10-16

我正在编写一个程序,以不同的方式广泛使用随机数,我每次都得到相同的随机数。我知道把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,你能不能发布一个小而完整的程序,每次运行它都不能生成不同的随机数?我很想看看……

这里有一个(当然)在我的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()的行为是正确的:它可能每次都产生相同的数字,这取决于你的编译器。它在我的编译器(clang在Mac上)也是。

您应该尝试这样做:

srand(static_cast<unsigned int>(time(0)));
std::shuffle(chrom_arr.begin(), chrom_arr.end(), default_random_engine(rand()));

只要chrom_arrstd::vector就可以。一旦你开始使用c++,我想这就是你想要做的。