Chiacchieriamo > Generale
Il milione di dadi è tratto
lapo:
--- Citazione ---[cite]Autore: Mauro[/cite]Se fai una spiegazione base, non mi offendo :)
--- Termina citazione ---
Alla fine, anche senza scendere nel dettaglio, ci sono alcune regole abbastanza semplici da seguire:
[ulist]
[*]se hai la tentazione di usare la rand() del C, o la Math.random() del Javascript, o cose del genere: DESISTI, fanno schifo. Ma proprio schifo, senza salvezza. Rivolgiti a Mersenne Twister o qualcosa del genere
[*]sei stai usando Java, usa la classe SecureRandom e non Random
[*]se ti servono numeri casuali per applicazioni crittografiche (o in cui comunque ne va della sicurezza di qualcosa) utilizza generatori CSRNG (Cryptographically Strong Random Number Generator) ben provati come i suddetti Yarrow o Fortuna e dagli in pasto buoni eventi casuali (questo se sei il kernel; se sei un programma utente e non hai enormi pretese, leggi da /dev/random e sii felice che il tuo kernel si sta facendo lo sbattimento al posto tuo)
[*]se non te ne intendi, chiedi a qualcuno che se ne intende di dare un'occhiata al tuo prodotto prima di utilizzarlo o pubblicarlo
[/ulist]
Mauro:
--- Citazione ---[cite]Autore: lapo[/cite](negh)entropia
--- Termina citazione ---
Cosa intendi?
--- Citazione ---[cite]Autore: lapo[/cite]Dubito sia mai stato prodotto un dado "di plastica" con caratteristiche simili e, anche se così fosse, il solo prenderlo in mano lo renderebbe comunque più non tale (anche solo per il sudore o il cambiamento della temperatura di un solo lato del dado, per dire)
--- Termina citazione ---
Ma perché in sé sarebbe cosí poco casuale?
lapo:
--- Citazione ---[cite]Autore: Mauro[/cite]Ma perché in sé sarebbe cosí poco casuale?
--- Termina citazione ---
Non è poco casuale: un dado è casuale abbastanza per la maggior parte dei giochi che usano i dadi, anzi probabilmente molto di più.
Il fatto è che gli informatici (e i matematici, e quella risma) sono molto più paranoici e già che ci sono e che tutto sommato "costa poco" pretendono molto molto molto molto di più.
Ora a una persona non interessa per niente sapere se è più probabile morire perché un meteorite devasta la tua città oppure per un fulmine globulare, sono entrambi numeri molto molto molto inferiori a cause più comuni come ad esempio "un pazzo brucia un rosso e ti investe", "avvelenamento da cibo", "mi sono scordato l'antitetanica" però, per capirsi, la differenza tra due probabilità (entrambe bassissime) come quelle due è la differenza per cui un fissato di numeri casuali si scandalizzerebbe.
Per esempio, Mersenne Twister è pensato per non mostrare tendenze di alcun tipo anche se utilizzato per simulare miliardi e miliardi di eventi definiti da coordinate in uno spazio 623-dimensionale; la rand() del C, oltre ad avere un ciclo non massimo (quindi inizia a ripetersi ben prima di 2 miliardi di valori), inizia a mostrare grossi trend già se utilizzata per disegnare punti nel piano: questi tenderanno a porsi preferenzialmente su alcune rette e non con uniformità nell'intero piano.
Cosa intendo con neghentropia: l'informazione è il contrario della casualità, è se vuoi ciò che scioglie la casualità; l'informazione si può misurare in bit positivi e la casualità (l'entropia) si misura in bit negativi ma, di solito la si chiama neghentropia (-entropia) e si usano numeri positivi lo stesso.
Per esempio se tu stai attendendo un messaggio composto da una qualsiasi lettera dell'alfabeto (quindi distribuzione uniforme su 26 valori) l'informazione compresa nel messaggio che riceverai (e che "ti toglierà il dubbio") sarà di
[size=12]log2(26) = 4.7 bit[/size]
dato che la probabilità di arrivo di quel messaggio era di
[size=12]log2(1/26) = -4.7 bit[/size]
(sì, i bit possono essere frazionari, dato che le scelte della vita non sempre sono binarie).
Mauro:
--- Citazione ---[cite]Autore: lapo[/cite]Non è poco casuale
--- Termina citazione ---
Rispetto ai numeri che citi sí; quello che chiedevo è perché questa poca casualità.
--- Citazione ---[cite]Autore: lapo[/cite]Per esempio se tu stai attendendo un messaggio composto da una qualsiasi lettera dell'alfabeto (quindi distribuzione uniforme su 26 valori) l'informazione compresa nel messaggio che riceverai (e che "ti toglierà il dubbio") sarà di log2(1/26) = -4.7 bit (sì, i bit possono essere frazionari, dato che le scelte della vita non sempre sono binarie)
--- Termina citazione ---
Ti credo sulla parola :P
Se misura l'informazione, che è misurata in bit positivi, perché è negativo?
lapo:
--- Citazione ---[cite]Autore: Mauro[/cite]quello che chiedevo è perché questa poca casualità.
--- Termina citazione ---
Beh, perché non è perfettamente simmetrico come forma esterna, non è composto di plastica con una densità perfettamente ben distribuita... anzi, se vuoi, già il fatto che le facce abbiano dei buchi in numero diverso incide notevolmente sulla loro probabilità di uscire, dato che pesano in modo diverso.
Una macchina da 1300000 tiri al giorno, in effetti, sarebbe un ottimo strumento di ricerca per quantificare questa imprecisione intrinseca, come fa notare il crittografo Schneier sul suo blog (in effetti quella macchina l'ho conosciuta a partire da quel post).
--- Citazione ---[cite]Autore: Mauro[/cite]Se misura l'informazione, che è misurata in bit positivi, perché è negativo?
--- Termina citazione ---
Dipende se consideri l'informazione che ti dà o l'entropia che ti toglie, comunque poi avevo editato il messaggio per chiarezza.
Nella pratica, si usano sempre numeri positivi e si capisce il senso dal contesto.
Normalmente in crittografia si considera "sicuro" qualcosa con almeno 80 bit di entropia (ma meglio 128, oggi come oggi).
2^80 circa uguale a 10^24... ecco i "numeroni" di cui parlavo, probabilità nell'ordine di 1 su 10^24...
Navigazione
[0] Indice dei post
Vai alla versione completa