21xrx.com
2024-12-27 20:45:56 Friday
登录
文章检索 我的文章 写文章
如何在C++中生成随机数,而不使用rand函数
2023-07-02 22:28:35 深夜i     --     --
C++ 生成随机数 不使用rand函数

C++是一种广泛使用的编程语言,被用于各种应用,比如游戏、数据分析、网站开发等。在许多情况下,需要使用随机数来模拟或生成数据,例如在游戏中,需要随机生成地图或怪物的位置。而在C++中,最常见的方式是使用rand函数来生成随机数,但是使用rand函数并不总是可靠的,会产生重复的序列或者质量低的伪随机数。所以,在本文中,我们将介绍一些不使用rand函数生成随机数的方法。

1.使用时间戳

在不同时间生成的随机数是不同的,所以可以使用当前时间的时间戳来生成随机数。可以使用time.h头文件中的time函数获取时间戳,然后把它作为随机数的种子。


#include <time.h>

unsigned int seed = (unsigned int)time(NULL);

srand(seed);

int random = rand();

2.使用物理随机数生成器

硬件随机数生成器是一种真正的随机数生成器,它利用物理过程如热噪声等来生成随机数。C++可以使用/dev/random或/dev/urandom设备文件来访问物理随机数生成器。


#include <iostream>

#include <fstream>

using namespace std;

int main()

{

  char buffer[4];

  ifstream urandom("/dev/urandom", ios::in|ios::binary);

  if (urandom.is_open())

  {

    urandom.read(buffer, 4);

    urandom.close();

  }

  else

  {

    cerr << "Error: Cannot open /dev/urandom" << endl;

    exit(1);

  }

  int* random = reinterpret_cast<int*>(buffer);

  cout << *random << endl;

  return 0;

}

3 .使用梅森旋转算法

梅森旋转算法(Mersenne Twister)是一种比较常用的随机数生成算法,它的周期长度很长,可以生成高质量的伪随机数。


#include <iostream>

#include <iomanip>

#include <random>

using namespace std;

int main()

{

  random_device rd;

  mt19937 gen(rd());

  uniform_int_distribution<> dis(1, 100);

  int random = dis(gen);

  cout << setw(3) << random << endl;

  return 0;

}

总结:

在C++中生成随机数的方法有很多,本文介绍了一些不使用rand函数的方法,例如使用时间戳、物理随机数生成器或梅森旋转算法等。使用这些方法可以更好地生成随机数,提高程序质量。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复