Измерение времени для генерации лучших случайных чисел в с ++ - PullRequest
0 голосов
/ 08 января 2020

Я учу себя программированию, и в качестве испытания я попытался создать простую текстовую систему сражений на С ++. Я использовал функцию rand () для генерации псевдослучайных чисел. Проблема в том, что они были одинаковыми при каждом запуске программы. Например, если num1 был в первом ходу 1, во втором 0, то 0, 1, 0, 1, 1, 1 и т. д. c, если вы закрыли программу и открыли ее снова, это всегда будет 1, 0, 0 , 1, 0, 1, 1, 1 ... Затем я посмотрел, как измерить время. Я хотел взять целое число, точно обозначающее, сколько времени понадобилось игроку для ввода определенной строки. Я точно следовал инструкциям (за исключением того, что назвал переменные по-разному). Это не работает. Может кто-нибудь, пожалуйста, помогите мне и объясните, как работает этот синтаксис? Я собрал простую программу, представляющую именно то, что я сделал, чтобы вам не приходилось go просматривать длинный, не относящийся к делу код всей системы сражений. Я посмотрел подобные вопросы, но пока ничего не получалось.

#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;
}

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Если вы хотите использовать функцию rand (), вам сначала нужно вызвать srand с помощью «seed», это пример:

#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("%d\n", 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 ++?

0 голосов
/ 08 января 2020

Ваш код не работает должным образом по 3 причинам:

  • Опечатка в именах переменных: измените timer1 и timer2 на time1 и time2 соответственно.
  • Используйте 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 ++ .

...