Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    26

    algoritmo random javascript

    Ho voluto provare a ricreare l'algoritmo della funzione random cosi tanto per provare. Ovviamente non mi è uscito. Ho trovato questa formula:

    x+1=3*x+6(mod 5);

    per ricreare lo script ho fatto così

    codice:
    <html>
    <script type="text/javascript">
    
    
    //x+1=3*x+6(%5);
      
       var x=0;
       var p;
       for(var i = 0; i<=5; i++)
       {
           x= (21*i+7)%10;	 
          alert(x);
       
       }
    
    
    
    
    
    
    
    
      
    
    
    </script>
    
    
    
    
    </html>
    Qualcuno con più esperienza sa dirmi se è corretto? anche se ovviamente non funziona quindi dubito
    Ultima modifica di simo90; 27-02-2014 a 18:26

  2. #2
    Boh è un normale LCG (anche se magari con parametri non perfetti), otterrai 5 numeri pseudocasuali... perché dici che "non funziona"?

    Comunque, JavaScript è trattato nella sezione apposita, sposto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    26
    Per funzionare funziona ma non capisco come fare se volessi che ogni volta che lancio il codice mi dia risultato diverso con gli stessi parametri

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Solitamente si utilizza uno timestamp come seme della funzione.
    Una cosa tipo:
    codice:
    x= (21*(new Date().getTime())+7)%10;
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    26
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Solitamente si utilizza uno timestamp come seme della funzione.
    Una cosa tipo:
    codice:
    x= (21*(new Date().getTime())+7)%10;
    Hrazie mille non sapevo che si facesse con il time.

  6. #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.

  7. #7
    (doppio)
    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.