Visualizzazione dei risultati da 1 a 7 su 7

Visualizzazione discussione

  1. #6
    Il time si usa solo all'inizio come seed, poi si procede come visto prima. Normalmente un LCG infatti si compone di due funzioni, una (srand in C) per inizializzare il seed, un'altra (rand in C) per ottenere il numero "casuale" successivo:
    codice:
    var x;
    function srand(seed)
    {
        x=seed;
    }
    
    function rand()
    {
        x=(x*1103515245+12345)%(1<<31-1);
        return x;
    }
    Prima di usare il generatore di numeri casuali si inizializza il seed (ad esempio) passando un timestamp a srand, poi si chiama rand per ogni numero casuale richiesto.
    Ovviamente, partendo dallo stesso seed la sequenza sarà sempre la stessa; questo dipende dal fatto che un algoritmo che può essere eseguito da un computer è inerentemente deterministico, per cui, dato lo stesso input, si avrà sempre lo stesso output - e infatti per avere numeri "davvero" casuali - ad esempio per uso in crittografia - il sistema operativo in genere "raccoglie entropia" annotandosi eventi stocastici più o meno esterni (timing dell'input da tastiera o da mouse, latenza di rete, tempo di accesso al disco, ...).

    Nota che questo algoritmo (LCG) è molto semplice, ma non dà numeri "molto" casuali: a seconda dei "numeri magici" utilizzati, è possibile ricavare i parametri e lo stato del generatore da un numero limitato di output, rendendo così i numeri generati prevedibili dall'esterno; questo è importante in ambito crittografico, dove dall'imprevedibilità dei numeri casuali dipende la sicurezza. Inoltre, un LCG ha diverse proprietà statistiche non perfette (c'è una particolare correlazione tra i numeri generati), per cui anche in ambito di simulazione statistica (es. metodo Montecarlo) non va troppo bene (per questo si usano algoritmi come il Mersenne Twister).
    Ultima modifica di MItaly; 28-02-2014 a 15:00
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.