Sto provando a tradurre qualche codice Python in C++. Ciò che fa il codice è eseguire una simulazione di monte carlo. Ho pensato che i risultati di Python e C++ potrebbero essere molto vicini, ma sembra che sia successo qualcosa di divertente.Differenza tra generazione di numeri casuali C++ e Python
Ecco quello che faccio in Python:
self.__length = 100
self.__monte_carlo_array=np.random.uniform(0.0, 1.0, self.__length)
Ecco quello che faccio in C++:
int length = 100;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, 1);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
monte_carlo_array[i] = d;
}
ho corse generazione di numeri sopra casuali volte 100x5 sia in Python e C++ e quindi fai simulazione di monte carlo con questi numeri casuali.
Nella simulazione monte carlo, ho impostato la soglia su 0,5, quindi posso facilmente verificare se i risultati sono distribuiti uniformemente.
Ecco un progetto concettuale che cosa simulazione Monte Carlo fa:
for(i = 0; i < length; i++)
{
if(monte_carlo_array[i] > threshold) // threshold = 0.5
monte_carlo_output[i] = 1;
else
monte_carlo_output[i] = 0;
}
Dal momento che la lunghezza della matrice Monte Carlo è 120, mi aspetto di vedere 60 1
s sia in Python e C++. Ho calcolato il numero medio di 1
s e ho scoperto che, sebbene il numero medio in C++ e Python sia intorno a 60, ma la tendenza è altamente correlata. Inoltre, il numero medio in Python è sempre più alto rispetto a C++.
Posso sapere se questo è perché ho fatto qualcosa di sbagliato, o semplicemente perché la differenza tra i meccanismi di generazione casuale in C++ e Python?
[modifica] prega di notare che il RNG in Python è anche il Mersenne Twister 19937.
Generatori di numeri casuali diversi forniscono diversi set di numeri casuali. Mi sarei aspettato che se lo avessi eseguito più volte (come centinaia di volte), avresti una differenza meno ovvia. –
Questo è davvero quello che vedi con il codice che mostri? Ci devono essere altri input, altrimenti non ci sarebbe alcuna correlazione tra i codici! Sospetto che il bug sia altrove ... –
Questi risultati sono stati manipolati ... –