Ho appena scoperto che il srand(1)
ripristina il PRNG di C (++) allo stato prima di qualsiasi chiamata a srand
(come definito nello reference). Tuttavia, il seme 0 sembra fare lo stesso, o lo stato prima di qualsiasi chiamata a srand
sembra utilizzare il seme 0. Qual è la differenza tra queste due chiamate o qual è la ragione per cui fanno la stessa cosa?Qual è la differenza tra srand (1) e srand (0)
Per esempio questo codice (execute on Ideone)
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int seed = 0; seed < 4; seed++) {
printf("Seed %d:", seed);
srand(seed);
for(int i = 0; i < 5; i++)
printf(" %10d", rand());
printf("\n");
}
return 0;
}
rendimenti
Seed 0: 1804289383 846930886 1681692777 1714636915 1957747793
Seed 1: 1804289383 846930886 1681692777 1714636915 1957747793
Seed 2: 1505335290 1738766719 190686788 260874575 747983061
Seed 3: 1205554746 483147985 844158168 953350440 612121425
Domanda molto interessante. A mia conoscenza, srand non ha alcun valore "magico", ma rand() è semplicemente inizializzato su un seme di 1, e quindi inizia con quel seme a meno che non venga detto qualcosa di diverso. Il che significherebbe implicitamente che se chiamate srand (1), "resettate allo stato originale". Comunque, l'output che hai postato suggerisce che in realtà "resetta magicamente" al seed 0 che avevi impostato prima, non a 1 (che, btw, la mia implementazione non fa). – Damon