Ispirato da General purpose random number generation Ho deciso di eseguire i miei test per vedere cosa c'era di sbagliato in rand(). Usando questo programma:È davvero rand() così male?
srand(time(0));
for (int i = 0; i < 1000000; ++i)
{
std::cout << rand() % 1000 << " ";
}
ho caricato in ottava utilizzando i comandi:
S = load("test.txt")
hist(S)
e ottenuto questo risultato:
Per me i risultati sembrano essere piuttosto uniforme. Mi aspettavo che i risultati fossero più distorti. Ho condotto il mio test in modo sbagliato?
rand è principalmente negativo perché: 'RAND_MAX' è definito dall'implementazione, e per esempio su Visual Studio è semplicemente 2^16; rand è globale, nel senso che se qualcun altro oltre a te chiama srand, potrebbe rovinare il tuo codice. Se hai compilatore C++ 11-compilant, considera l'utilizzo di uno dei suoi RNG – Creris
A seconda dell'implementazione, 'rand()' può avere un'entropia bassa sui suoi bit più bassi. Se hai fatto 'rand()% 4', in alcune implementazioni questo è piuttosto non uniforme. Questo è il motivo per cui è generalmente raccomandato (se usi 'rand()') per scrivere 'rand()/(RAND_MAX/4)' in questo caso. – leemes
* È davvero rand() così male? * SÌ! –