测量时间以在 c++ 中生成更好的随机数

Measuring time to generate better random numbers in c++

本文关键字:更好 随机数 时间 c++ 测量      更新时间:2023-10-16

我正在自学编程,作为一个挑战,我尝试用c ++制作一个简单的文本战斗系统。我使用函数 rand(( 生成伪随机数。问题是,每次运行程序时它们都是一样的。例如,如果 num1 在第一回合 1,在第二个 0 上,然后是 0、1、0、1、1、1、1 等,如果您关闭程序并重新打开它,它将始终是 1、0、0、1、0、1、1、1... 然后我查找了如何测量时间。我想取一个整数来准确表达玩家输入某个字符串所花费的时间。我完全遵循了教程(除了我以不同的方式命名变量(。它没有用。任何人都可以帮助我并解释一下它的语法是如何工作的吗?我把一个简单的程序放在一起,准确地代表我所做的,这样你就不必经历整个战斗系统的冗长、无关的代码。我查找了这样的问题,但没有任何效果。

#include <iostream>
#include <chrono>

using namespace std;

int main()
{
auto time1 = std::chrono::high_resolution_clock::now();
cout << "enter a character:" << endl;
char blob;
cin >> blob;
auto time2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> time = timer2 - timer1;
cout << time;
return 0;
}

如果你不想使用 rand(( 函数,你需要首先用 "seed" 调用 srand。 这是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main () {
int i, n;
time_t t;
n = 5;
/* Intializes random number generator */
srand((unsigned) time(&t));
/* Print 5 random numbers from 0 to 50 */
for( i = 0 ; i < n ; i++ ) {
printf("%dn", rand() % 50);
}
return(0);
}

但就像人们在评论中写的那样是 C 样式代码而不是 CPP 这是与 CPP 一起使用的

#include <random>
#include <iostream>
int main()
{
std::random_device dev;
std::mt19937 rng(dev());
std::uniform_int_distribution<std::mt19937::result_type> dist6(1,6); // distribution in range [1, 6]
std::cout << dist6(rng) << std::endl;
}

如何在C++中生成随机数?

由于 3 个原因,您的代码无法按预期工作:

  • 变量名中的拼写错误:将timer1timer2分别更改为time1time2
  • 使用duration_cast而不是duration
  • 使用count()方法。

count()返回调用的类型的刻度数 它。

这是完成的代码:

#include <iostream>
#include <chrono>

using namespace std;
int main()
{
// meausure time at the begining.
auto time1 = chrono::high_resolution_clock::now();
cout << "enter a character:" << endl;
char blob;
// wait for user input.
cin >> blob;
// meausure time at the ending.
auto time2 = chrono::high_resolution_clock::now();
// evaluate and print the difference.
auto time = chrono::duration_cast<chrono::milliseconds>(time2 - time1);
cout << time.count();
return 0;
}

但是,正如@yaodav所建议的,还有其他更好的方法来生成C++中的随机数。