mi chiedevo.
voglio una sequenza di numeri random tra (poniamo caso) 0 e 10000000.
un pc può farlo?
voglio dire, può farlo in modo COMPLETAMENTE CASUALE, quindi non ricorrendo neanche a incasinatissimi algoritmi di calcolo?
oppure è sempre riscontrabile una sequenza analizzando i numeri estratti?
sì che può farlo, non è che sia granchè come libero arbitrio, ma mediante incasinatissimi algoritmi ti fa tutti i numeri casuali che vuoi.
Come ti servono? In una pagina html? Te li stampo qui? Vuoi un programmillo in C?
Come ti servono? In una pagina html? Te li stampo qui? Vuoi un programmillo in C?
anzi, arrangiati qui -> http://www.random.org/nform.html

nono non mi serve nulla, era una domanda che è nata stasera discutendo con la meddy.
sei sicuro che sia COMPLETAMENTE casuale?
la presenza stessa di calcoli per pescare un numero dovrebbe poterti ricondurre ad una sequenza, no?
sei sicuro che sia COMPLETAMENTE casuale?
la presenza stessa di calcoli per pescare un numero dovrebbe poterti ricondurre ad una sequenza, no?
sì, e ti dirò di più, nei computer è importante che sia così.
Si chiama "random seed" ed è il "seme" che inizializza la funzione che genera i numeri a caso. In pratica con valori uguali di random seed vengono generati sempre gli stessi numeri casuali. Sembra una contraddizione, ma non lo è, basta fare in modo che il random seed venga inizializzato per bene e sei quasi certo che ci siano dei numeri casuali in modo accettabile.
io per esempio quando mi studio il C faccio inizializzare il seed con l'ora corrente, in modo che ogni secondo si pesca automaticamente un random seed diverso.
Cmq se la discussione era "i numeri casuali sono davvero casuali sui pc", allora la risposta è no: ci sono degli artifici per farli sembrare ragonevolmente casuali per l'uso che se ne deve fare.
Si chiama "random seed" ed è il "seme" che inizializza la funzione che genera i numeri a caso. In pratica con valori uguali di random seed vengono generati sempre gli stessi numeri casuali. Sembra una contraddizione, ma non lo è, basta fare in modo che il random seed venga inizializzato per bene e sei quasi certo che ci siano dei numeri casuali in modo accettabile.
io per esempio quando mi studio il C faccio inizializzare il seed con l'ora corrente, in modo che ogni secondo si pesca automaticamente un random seed diverso.
Cmq se la discussione era "i numeri casuali sono davvero casuali sui pc", allora la risposta è no: ci sono degli artifici per farli sembrare ragonevolmente casuali per l'uso che se ne deve fare.
quindi teoricamente per un estrazione di un concorso l'uso del computer per estrarre i nominativi non è valida, in quanto non completamente casuale?
Non puoi riuscire a sostenerlo, a meno che non riesci a provare che l'algoritmo usato per l'estrazione non è random, ma segue una sequenza predeterminata.
E' impossibile generare un segnale random "vero" come lo intendi tu tramite il pc. Questo perchè cmq la generazione di numeri da parte di un calcolatore deve essere fatta secondo un programma, e un programma ovviamene non può essere indeterminato.
Però cmq la generazione di numeri random dei computer, benchè siano "calcolati" viene comunque ritenuta valida, in quanto è praticamente impossibile (ma non matematicamente) che si generino sequenze random uguali.
nono, a meno che non ti leggi l'algoritmo e non scopri che sia di una banalità disarmante no.
basta una cazzatina fatta in C con scritto in mezzo un
#include
srand(time(NULL));
printf("Questo è un numero casuale tra 0 e 10: %d", rand()%10);
e già hai un numero casuale valido.
Però prendendo l'ora attuale come seed si rischia di incappare nella stessa sequenza prima o poi.
Diciamo che le estrazioni del Lotto si fanno ogni mattina alle 10.
Prima o poi si beccano esattamente la stessa ora e lo stesso secondo di run della routine di generazione dei numeri casuali, giusto?
Non è più tamarroso allora utilizzare qualcosa come incrementare un numerillo da quando l'utente apre il programma a quando lancia la routine di scelta... ovviamente con qualche accorgimento... come ad esempio moltiplicare per 100 il tempo che passa nella prima schermata, per 10 il tempo che passa nella seconda e sommarle al tempo che passa nella terza, come random seed dovrebbe essere più affidabile.
Diciamo che le estrazioni del Lotto si fanno ogni mattina alle 10.
Prima o poi si beccano esattamente la stessa ora e lo stesso secondo di run della routine di generazione dei numeri casuali, giusto?
Non è più tamarroso allora utilizzare qualcosa come incrementare un numerillo da quando l'utente apre il programma a quando lancia la routine di scelta... ovviamente con qualche accorgimento... come ad esempio moltiplicare per 100 il tempo che passa nella prima schermata, per 10 il tempo che passa nella seconda e sommarle al tempo che passa nella terza, come random seed dovrebbe essere più affidabile.
ovviamente l'accorgimento che usi per inizializzare il random seed deve essere appropiato all'uso del programma.
io uso il tempo per problemi di sbattimento e perchè i miei programmi sono poco importanti (i servono solo un tot di numeri da far ordinare al pc con i vari algoritmi di sorting), ma se dovessi pensare a un meccanismo d'estrazione per lal lotteria italiana ci penserei un po' di più
C'è da dire poi che anche i grandi sbagliano: ogni tanto ci si imbatte in plugin per winamp chiamati "real random play plugin for winamp" che cercano di sistemare meglio la casualità di scelta dei brani
io uso il tempo per problemi di sbattimento e perchè i miei programmi sono poco importanti (i servono solo un tot di numeri da far ordinare al pc con i vari algoritmi di sorting), ma se dovessi pensare a un meccanismo d'estrazione per lal lotteria italiana ci penserei un po' di più

C'è da dire poi che anche i grandi sbagliano: ogni tanto ci si imbatte in plugin per winamp chiamati "real random play plugin for winamp" che cercano di sistemare meglio la casualità di scelta dei brani

E' una discussione che avevo già fatto tempo fa con non mi ricordo chi.. ed era spuntata fuori per puro caso 
Comunque: per ovvi motivi il numero random non può essere veramente casuale ma è per forza di cose legato a una serie di calcoli..
Non so, potresti usare come random seed una cifra = ora+minuti+secondi+giorno+mese
per dire.

Comunque: per ovvi motivi il numero random non può essere veramente casuale ma è per forza di cose legato a una serie di calcoli..
Non so, potresti usare come random seed una cifra = ora+minuti+secondi+giorno+mese
per dire.
Nella maggior parte dei casi quelli che usiamo sono PRNG (Pseudo random number generator) cioè i numeri non sono propriamente casuali, ma dipendono da un'algoritmo deterministico il cui numero degli stati (valori diversi che produce prima di rifarne uno uguale è elevatissimo).
Questi algoritmi sono sempre inizializzati da un valore prodotto da un vero RNG percui la sequenza di numeri è praticamente come casuale.
Non si possono usare direttamente gli RNG in quanto la quantità di byte prodotti da questi nel tempo è insufficente per le necessità attuali.
Esempio : l'RNG dell'intel usa il rumore termico prodotto dalle resistenze all'interno dei suoi chipset per produrre numeri casuali
http://www.intel.com/design/security/rng/rnghow.htm
Ciao
Questi algoritmi sono sempre inizializzati da un valore prodotto da un vero RNG percui la sequenza di numeri è praticamente come casuale.
Non si possono usare direttamente gli RNG in quanto la quantità di byte prodotti da questi nel tempo è insufficente per le necessità attuali.
Esempio : l'RNG dell'intel usa il rumore termico prodotto dalle resistenze all'interno dei suoi chipset per produrre numeri casuali
http://www.intel.com/design/security/rng/rnghow.htm
Ciao

quindi in conclusione non è possibile avere un random VERAMENTE random con un computer?
ok avevo torto
ok avevo torto

Su GunBound quando scegli mappa random alcune non escono MAI, invece CAVE esce direi un 70% delle volte...


La risposta più corretta è quella di Zetainc, ma c'è soluzione anche a questo.
Si tratta di inserire degli "elementi di disturbo" che randomizzano ancora di più il risultato.
Un esempio è utilizzare il rumore proveniente dal microfono per causare una sequenza di numeri da applicare all'algoritmo di calcolo randomico.
non avendo affrontato l'algoritmo in maniera didattica (leggi: non l'ho ancora studiato), e ragionando da "programmatore", quello che mi viene da dire è che un algoritmo di generazione di un numero random è comunque basato su un modello deterministico
essendo la base deterministica sarà sempre e comunque possibile ricostuire l'esatta sequenza di passi effettuati dall'algoritmo (magari provato nmila volte prima di riuscirci, ma è possibile)
quindi, sempre andando per logica, mi viene da dire che per avere un valore realmente randomico ci si deve basare su un evento "naturale" non deterministico (quale appunto il rumore elettronico generato dalle resistenze)
ho detto qualche idiozia?
EDIT: praticamente ho riscritto quello che ha detto zetainc
la prossima volta lo leggo tutto il topic
essendo la base deterministica sarà sempre e comunque possibile ricostuire l'esatta sequenza di passi effettuati dall'algoritmo (magari provato nmila volte prima di riuscirci, ma è possibile)
quindi, sempre andando per logica, mi viene da dire che per avere un valore realmente randomico ci si deve basare su un evento "naturale" non deterministico (quale appunto il rumore elettronico generato dalle resistenze)
ho detto qualche idiozia?
EDIT: praticamente ho riscritto quello che ha detto zetainc

la prossima volta lo leggo tutto il topic

No, tutto perfetto, hai solo messo insieme il post di zetainc ed il mio!



grazie a tutti :>
chiedo venia


per punizione non scriverò più in topic dove han risposto goran o zetainc

allora neanche il lancio di un dato non è completamente random perchè la caduta e il rotolamento è determinato da leggi fisiche?