|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 42
|
[C++] Problema generatore numeri random
Ciao a tutti ho un problema con il seguente codice
Codice:
#include <iostream>
#include <random>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int dado1, dado2;
default_random_engine generatore(time(0));
uniform_int_distribution<int> dado(1, 6);
dado1 = dado(generatore);
dado2 = dado(generatore);
cout <<dado1 <<" " <<dado2 <<endl;
TNX a TUTTI |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Niente di misterioso, la funzione time restituisce il numero di secondi dal 1° gennaio 1970. Da quel giorno di secondi ne sono trascorsi un bel po', in questo momento circa 1.4 miliardi. Tra un minuto, un'ora, un giorno, un mese, sempre 1.4 miliardi rimangono, cambiano solo le cifre meno significative.
Siccome il generatore di default è un generatore lineare, seed vicini producono come primo output numeri relativamente vicini tra loro, basta analizzare la formula: nuova_x = (a * x + c) % MAX_INT Facciamo un esempio con a=3, c=2 e MAX_INT=100: con x = 100 -> (3*100+2)%100 = 2 con x = 102 -> (3*102+2)%100 = 8 una differenza di n nel seme produce una differenza di 2*n nel risultato, in questo appena 6. Questa differenza che può sembrare enorme, diventa microscopica quando applichi uniform_int_distribution. Prova a moltiplicare time(0) per 100000 quando inizializzi il generatore e vedi che succede. |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Oppure usa random_device:
Codice:
random_device rd; default_random_engine dre(rd()); uniform_int_distribution<unsigned int> uid(1, 6); cout << uid(dre) << " " << uid(dre) << endl; |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:15.



















