On Thu, 16 Oct 2008 22:13:55 +0200, [EMAIL PROTECTED] wrote: > Ciao, > ho scritto un encoder in python e in Java; fanno le stesse identiche > computazioni, e, se alimentati con lo stesso input, non forniscono lo > stesso output. > > In allegato trovate sia il codice Java che quello python. > Per iniziare, vi serve un file di input: > $ dd if=/dev/urandom of=test.img bs=1048576 count=1 > > Come potete vedere il codice è molto corto, ma i due programmi fanno > esattamente la stessa cosa (la bitlist è uguale, quindi entrambi > selezionano gli stessi blocchi in input e ne fanno lo xor - potete > vedere che i blocchi selezionati corrispondono sempre perché ogni > volta che un blocco viene selezionato ne stampa l'hash). > Qui viene la parte di incongruenza: avendo gli stessi input, perché i > due programmi producono due output diversi? Potete vedere questo > dall'hash del blocco risultante (random_block) che viene stampato alla > fine del programma. > In Java ha un valore che è totalmente diverso da quello in python. > Perché? > Operando sullo stesso input e facendo le stesse operazioni, dovrebbero > restituire lo stesso output. > > Dove sbaglio?
Non ho provato perché non ho voglia di ricordarmi come si compila il Java, ma, avevo notato anche ieri, che inizializzi random_block con una lista di '0', ovvero con una lista di "48", mentre probabilmente avresti voluto (e penso che la versione in Java faccia) inizializzarla con dei valori zero: In [1]: ord('0') Out[1]: 48 In [2]: ord('\0') Out[2]: 0 Prova se con "random_block = ['\0']*blocksize" ottieni il risultato desiderato. Non aspettarti una velocità mostruosa da questo codice. Ieri mi stavo divertendo a micro-ottimizzarlo un po', l'avevo fatto scendere da 20 a 9 secondi... ma ti hanno già dato la risposta migliore: se usi un pacchetto di calcolo matriciale (numpy è il più recente) il risultato sarà di un ordine di grandezza o due più veloce. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python