Re: [C] Funzionamentodella funzione rand()

Messaggioda claudio86 » 15/06/2020, 08:31

Suwako27 ha scritto:se avvio il programma letteralmente ogni secondo vedo che N cambia crescendo in maniera costante( es 130 134 138)


Se avvii il programma ogni secondo, stai chiamando srand() ogni secondo, passandogli valore restituito da time(), che spesso (ma non necessariamente) è il numero di secondi dal 1970.
Idealmente dovresti chiamare srand() solo una volta, perché è una funzione completamente deterministica.
Probabilmente srand() inizializza il generatore di numeri casuali con un valore direttamente ottenuto dal parametro che gli passi, che aumenta ogni secondo di tre.

Se non sei legato al C, versioni recenti (di questa decade) di C++ hanno librerie per la generazione di numeri casuali molto più avanzate e robuste (tenendo sempre conto che non supportano la generazione di numeri casuali crittograficamente sicuri).
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 552 di 1130
Iscritto il: 09/01/2011, 15:12

Re: [C] Funzionamentodella funzione rand()

Messaggioda vict85 » 15/06/2020, 09:01

Il punto è infatti che inizializzi srand con una funzione "temporale". Per capirci, prova a lanciare questo programma:
Codice:
#include <stdio.h>
#include <stdlib.h>

int
main( void )
{
    unsigned int const K = 1028453982;
    for ( int i = 0; i != 20; ++i )
    {
        srand( K + i );
        unsigned int a = rand( ) % 100 + 100;
        unsigned int b = rand( ) % 100 + 100;
        unsigned int c = rand( ) % 100 + 100;
        printf( "%u %u %u\n", a, b, c );
    }
}

e vedrai lo stesso risultato (ho usato un numero a caso piuttosto grande).
vict85
Moderatore
Moderatore
 
Messaggio: 10138 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] Funzionamentodella funzione rand()

Messaggioda Suwako27 » 15/06/2020, 22:25

Molto chiaro il concetto, grazie per la spiegazione! :wink:
Suwako27
New Member
New Member
 
Messaggio: 13 di 74
Iscritto il: 01/03/2020, 18:55

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite