Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472

    qualcosa di più su numeri random, algoritmi, prng, trng...

    Lo scopo di questo post non è parlare dei vari rand o mt_rand bensì quello di capire un po' di più l’universo che ruota attorno ai numeri random.

    Sappiamo che un computer può essere in grado di generare solo PRNG (pseudo random number generator) - come ad esempio il metodo Monte Carlo.

    Per generare i TRNG (true random number generator) ci vuole un generatore hardware di numeri casuali che generalmente sono basati su fenomeni microscopici come il rumore termico, l'effetto fotoelettrico o il decadimento dell'uranio o del cesio radioattivo.

    Un generatore di numeri pseudo-casuali deve essere inizializzato assegnando un opportuno valore a un parametro numerico (il cosiddetto seme).
    Con php si utilizzava la funzione srand o mt_srand per inizializzare il parametro; mentre invece dalla versione 4.2.0 questo procedimento avviene automaticamente.

    I numeri pseudo-casuali, presi in un numero sufficientemente ampio:
    - soddisfano il requisito dell'equidistribuzione (cioè se ad esempio si simula 50.000 volte il lancio di un dado otterremo circa 8333 per ogni faccia)
    - presentano indipendenza fra elementi successivi della sequenza (ad esempio la faccia 3 non sarà sempre seguita dalla faccia 5, oppure sono tutte sequenze del tipo 1-2-3-4-5-6…).
    Se l'input di partenza è il medesimo (il seme) la sequenza generata è la stessa.
    Hanno però il vantaggio di avere un elevato throughput di numeri generati.

    I TRNG hanno il vantaggio della genuinità del numero casuale, il quale risulta statisticamente indipendente da qualsiasi altro numero generato nello stesso contesto; presentano, di conseguenza, un basso throughput.

    Se da un lato generare una sequenza PRNG è semplice e sarà equidistribuita ed indipendenza fra due elementi consecutivi, potrà comunque risultare in qualche modo "prevedibile"; dall'altro lato procurarsi un generatore hardware di numeri casuali (TRNG) dovrebbe essere cosa molto complessa (?).

    Una giusta via di mezzo, che dovrebbe combinare i vantaggi dei due metodi (pur facendo conservare un elevato throughput) potrebbe essere quello di sfruttare i PRNG con algoritmi difficilmente predicibili.

    Ora alcune domande e considerazioni...
    - quale algoritmo utilizza php?
    - da quello che ho capito php inizializza automaticamente il seme.
    Una volta inizializzato però la sequenza dei numeri casuali generati sarà sempre quella - dato il seme -. Giusto?
    - utilizzando srand si andava ad inizializzare il seme. Poniamo il caso che con srand si andasse ad inizializzare il seme al valore di 358948 (dico un numero a caso).
    Se adesso il seme venisse inizializzato proprio a 358948 si otterrebbe la stessa sequenza di numeri casuali giusto?
    - Avete idea di qualche algoritmo "difficilmente predicibile" da utilizzare con php?

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    qualcuno che interviene...?

  3. #3
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    Che io sappia mtrand utilizza il Mersenne Twister

    Interessante comunque (credo sia sempre lo stesso principio ma applicato diversamente)
    è la libreria gmp che prevede anche il rand

    gmp_strval(gmp_random(2));
    ...altri 5 anni di purga...

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.