Utilizzo di valori random in più sottoprogrammi

di il
5 risposte

Utilizzo di valori random in più sottoprogrammi

Ciao a tutti,
vorrei chiedere un consiglio.
Ho sviluppato un programma che necessità di utilizzare la funzione "random()" in più sottoprogrammi.

Ho letto che la funzione "srand" è da inizializzare una volta nel programma. Devo rispettare questa regola anche se uso più sottoprogrammi?

Qualcuno ha qualche suggerimento a riguardo, al fine di ottenere una generazione di valori più randomica possibile?

Grazie in anticipo

5 Risposte

  • Re: Utilizzo di valori random in più sottoprogrammi

    Va bene una volta sola. Se vuoi reinizializzare il seed una volta ogni tanto non ti dimenticare di mettere uno sleep di qualche millisecondo prima, magari scelto anch'esso casualmente. Ma non dovrebbe cambiare molto nella distribuzione finale
  • Re: Utilizzo di valori random in più sottoprogrammi

    Grazie per il consiglio.
    La funzione srand la eseguo ad esempio nella funzione main oppure in una dedicata?

    È possibile utilizzare /devo/random come valore casuale per la funzione srand nel caso in cui utilizzi Linux?

    Grazie
  • Re: Utilizzo di valori random in più sottoprogrammi

    Va bene nel main

    Che ci fai con dev/random ? Mappa centomila valori su excel: se la distribuzione è uniforme va bene qualsiasi sistema pseudorandom. Se ti servono numeri realmente random, la soluzione non può essere solo software
  • Re: Utilizzo di valori random in più sottoprogrammi

    NON ESISTE il concetto di "piu' random possibile":

    0) la funzione "srand" va usata UN'UNICA VOLTA PRIMA di usare il generatore di numeri casuali.
    ATTENZIONE, se la chiami con lo STESSO parametro, la funzione "random()" generera' SEMPRE la stessa sequenza di numeri.
    QUINDI, per assicurarti che generi SEMPRE numeiri diversi, la devi chiamare con un parametro SEMPRE diverso.
    Un classico e' usare il timestamp (anno, mese, giorno, ora, minuti,secondi,centesimi di secondo).

    1) senza un "generatore hardware di numeri random" non e' possibile generare numeri VERAMENTE random.

    2) usare un VERO generatore di numeri random serve in un numero infinitesimale di casi

    3) la possibilita' di generare LA STESSA sequenza di numeri random e' estremamente utile per controllare se il programma si comporta in modo corretto oppure no. Ad esempio, se esegui DUE VOLTE lo stesso programma con lo stesso generatore inizializzato nello stesso modo ed ottieni due risultati diversi HAI UN PROBLEMA.

    4) c'e' un'INTERO MONDO legato ai generatori di numeri casuali: la funzione "random()" e' SOLO un possibile modo di generarli ed e' il piu' semplice. Modi piu' complessi hanno senso SOLO se hai a che fare con problematiche molto piu' complesse.

    5) il generatore di numeri casuali segue opportune DISTRBUZIONI di probabilita'. La piu' semplice e' quella UNIFORME. Se non sai cosa sono, allora non ti serve usare funzioni "piu' randm possibili"

    Visto che sei ancora alle prime esperienze, la funzione "random()" e' piu' che sufficiente.

    Il problema potrebbe nascere SE usi piu' thread, oppure se devi generare MILIARDI oppure DECINE/CENTINAIA DI MILIARDI di numeri casuali
    In questo caso bisogna prendere dei provvedimenti.
    Ma suppongo che tu non sappia di cosa stia parlando, QUINDI, "random()" e' piu' che sufficiente.
  • Re: Utilizzo di valori random in più sottoprogrammi

    Grazie per i chiarimenti.

    Questo è un semplice esempio: https://www.tutorialspoint.com/c_standard_library/c_function_rand.htm

    In sintesi richiamo la funzione srand con i parametri indicati in questa funzione, ottengo sequenze differenti di output utilizzando la funzione "rand()" dato che appunto cambia l'input ogni volta.
Devi accedere o registrarti per scrivere nel forum
5 risposte