2009-02-14 14 views
5

Esiste una libreria Java con il nome di Uncommon Maths che dichiara di fornire generatori di numeri casuali migliori di Sun e (potenzialmente) anche di BouncyCastle. Come si può determinare se la loro biblioteca può essere attendibile? Mi fido di Sun e BouncyCastle perché molte aziende importanti usano le loro cose. Non è chiaro se la matematica non comune rientra nella stessa categoria. Qualche idea?È possibile che la rara libreria matematica sia attendibile?

+0

Puoi chiedere allo sviluppatore stesso: http://stackoverflow.com/users/5171/dan-dyer –

+0

Uncommon Maths è stato biforcuto da Watchmaker Framework, che è una libreria di calcolo evolutiva scritta anche da Dan Dyer. È in circolazione da molto tempo e viene utilizzato in diversi progetti Apache. Penso che la sua storia di fiducia nella comunità dimostri il suo valore. – ingyhere

risposta

4

comune matematica sostiene di passare la Diehard tests. È affidabile come lo so.

Puoi sempre essere uno scienziato e ripetere questi test per te stesso come controllo indipendente.

0

Scrivi i tuoi test.

Un controllo di base di un generatore di numeri casuali può essere fatto utilizzando un chi-square test

8

Buona domanda;)

Tutti gli algoritmi RNG sono algoritmi ben noti inventati da persone più intelligenti di me. Sono un programmatore, non un matematico. Ho appena portato il codice C originale. Quindi devi sperare di non aver introdotto alcun bug nella conversione.

Come con la maggior parte del software open source, non c'è NESSUNA GARANZIA. Se vuoi usarlo per le simulazioni, penso che sia un'ottima scelta. Se vuoi usarlo per la crittografia, qualcosa come Fortuna sarebbe meglio.

Uncommons Maths non è così diffuso come alcune librerie. Ottiene tra 5 e 20 download a settimana. Non so quanti di quelli in realtà continueranno a usarlo in applicazioni serie. Lo uso per lo evolutionary computation e alcuni banali programmi relativi al poker con cui ho giocato.

Ho eseguito Diehard su ciascuna delle implementazioni RNG e non evidenzia eventuali difetti. Detto questo, i risultati di irriducibili non sono le più facili da interpretare:

Così non dovrebbe essere sorpreso con valori di p occasionali vicino a 0 o 1, come ad come 0,0012 e 0,9983. Quando un bit stream FAIL GRANDE, si otterrà p s of 0 or 1 to six or more places. By all means, do not, as a Statistician might, think that a p < .025 or p> .975 means that the RNG has "failed the test at the .05 level". Such p s accadere tra le centinaia che DIEHARD produce, anche con buoni RNG . Quindi tieni presente che "p succede".

Gli Uncommons Maths RNG soddisfano tutti questa sfocata definizione di successo. Ci sono uno o due valori p al di fuori dell'intervallo 0.025 .. 0.975, ma nessuno che "fallisce grande". Questo è paragonabile ai risultati ottenuti con Java SecureRandom (e meglio di java.util.Random, che fa "fail big").

Se si desidera testare questo per sé, c'è una classe chiamata DiehardInputGenerator nella distribuzione. Questo genera il file 12mb di cui hai bisogno per eseguire Diehard.

+0

Qualche piano per portare Fortuna a Java? :) FSF ha rilasciato una versione Java ma è GPL e non estende java.util.Random per comodità: http://www.docjar.com/html/api/gnu/javax/crypto/prng/Fortuna.java .html – Gili

+1

+1 - lavoro fantastico, Dan. Davvero ben fatto. – duffymo

+0

Fortuna è una vera roba da cintura e bretelle. Gestisce più fonti di entropia e recupera dal compromesso. Uncommons Maths AESCounterRNG è il PRNG di base utilizzato da Fortuna, ma omette il pool di entropia, la re-seeding automatica e la gestione dei file di seed. –

Problemi correlati