Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-06-2007, 13:55   #1
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
[java] divisione in modulo

andando ad accedere ad un array con questa operazione

array[Random.nextInt()%array.length] non si rischia di ottenere con grandissima frequenza l' elemento in posizione 0 o quello in posizione 1 dato che si considera il resto della divisione intera.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:02   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
...ovvero?
l'operatore % ti dice qual'è il resto della divisione intera...
La divisione in floating point in teoria non dovrebbe darti alcun resto, anche se nella pratica gli errori di arrotondamento sono sempre scontati.
Cmq c'era un bel thread proprio sulle tecniche per ottenere numeri pseudo-casuali + decenti rispetto al classico '%'.
..solo ke non mi ricordo come si chiama questo thread
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:07   #3
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
andando ad accedere ad un array con questa operazione

array[Random.nextInt()%array.length] non si rischia di ottenere con grandissima frequenza l' elemento in posizione 0 o quello in posizione 1 dato che si considera il resto della divisione intera.
quello che fai è dividere un numero intero per un'altro numero intero e ne prendi il resto, che è un numero compreso tra 0 e array.length-1 con probabilità uniforme (se supponiamo che Random.nextInt sia realmente casuale). quindi no

Ultima modifica di k0nt3 : 19-06-2007 alle 14:20.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:12   #4
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
be se però ipotizziamo che la lunghezza dell' array sia 2 per tutti i numeri casuali parti avremmo resto 0,accedendo di fatto sempre a quell' elemento.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:19   #5
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
be se però ipotizziamo che la lunghezza dell' array sia 2 per tutti i numeri casuali parti avremmo resto 0,accedendo di fatto sempre a quell' elemento.
....e x quelli dispari avremo resto 1 accedendo quindi con *quasi* uguale probabilità ad entrambi gli elementi dell'array.
Ancora mi sfugge dove vuoi arrivare
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:38   #6
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
....e x quelli dispari avremo resto 1 accedendo quindi con *quasi* uguale probabilità ad entrambi gli elementi dell'array.
Ancora mi sfugge dove vuoi arrivare
si in un array a dimensione 2 si ma con dimensioni maggiori dovrebbe esserci cmq questo maggiore accesso alla cella 0.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2007, 14:42   #7
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
si in un array a dimensione 2 si ma con dimensioni maggiori dovrebbe esserci cmq questo maggiore accesso alla cella 0.
assolutamente no! prendi una dimensione di 5, i casi sono:
Random.nextInt = multiplo di 5 -> resto 0
Random.nextInt = (multiplo di 5) + 1 -> resto 1
Random.nextInt = (multiplo di 5) + 2 -> resto 2
Random.nextInt = (multiplo di 5) + 3 -> resto 3
Random.nextInt = (multiplo di 5) + 4 -> resto 4

tutti i casi hanno pari frequenza
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 14:45   #8
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
per quanto quello che dici teoricamente è corretto,so che molti programmatori evitano l' utilizzo del modulo propriamente perchè nella pratica poi potrebbe generarsi carico eccessivo verso alcuni numeri.quello che penso io e che il carico è distribuito equamente estraendo a random tutti i numeri del range,ma andando ad analizzare un numero limitato di estrazioni non si avrebbe certo una distribuzione uniforme.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 14:54   #9
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
per quanto quello che dici teoricamente è corretto,so che molti programmatori evitano l' utilizzo del modulo propriamente perchè nella pratica poi potrebbe generarsi carico eccessivo verso alcuni numeri.quello che penso io e che il carico è distribuito equamente estraendo a random tutti i numeri del range,ma andando ad analizzare un numero limitato di estrazioni non si avrebbe certo una distribuzione uniforme.
no si avrebbe qualcosa di casuale, cioè una volta tanti 5, la prossima volta tanti 3 e quella dopo tanti 8. se lo fai tante volte vedi che ogni numero compare con la stessa frequenza in media.
non c'è motivo per credere che qualche numero appaia più spesso (in realtà tutto è legato all'assunzione che Random.nextInt estragga numeri veramente casuali, ma questo dipende da come generi il seme.. di norma si usa il timestamp).
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 14:59   #10
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
be ovviamente su un numero grande di estrazione avremmo una certa omogeneita..probabilmente su poche operazioni no.Riporto una mia idea e quella di altri programmatori..sopraattutto di c++
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:08   #11
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
be ovviamente su un numero grande di estrazione avremmo una certa omogeneita..probabilmente su poche operazioni no.Riporto una mia idea e quella di altri programmatori..sopraattutto di c++
comunque sia in java sarebbe meglio usare Random.nextInt(length) che come scritto nella javadoc assicura l'uniformità.
magari faccio qualche esperimento
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:09   #12
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
ti posto la sequenza generata con 10 estrazioni random (Random.nextInt()%4):
-3 0 1 2 0 -3 1 -1 2 0 -3.

Mi chiedo da dove spuntino quei numeri negativi però.

Ultima modifica di nuovoUtente86 : 20-06-2007 alle 15:11.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:10   #13
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
comunque sia in java sarebbe meglio usare Random.nextInt(length) che come scritto nella javadoc assicura l'uniformità.
magari faccio qualche esperimento
si infatti utilizzo quello o meglio Math.random().
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:17   #14
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Codice:
import java.util.Random;


public class Main {
	private static int[] freqs;
	private static int length;
	private static Random rnd;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		length = 10;
		freqs = new int[length];
		
		for (int i = 0; i < freqs.length; i++) {
			freqs[i] = 0;
		}
		
		rnd = new Random();
		for (int i = 0; i < 10; i++) {
			++freqs[Math.abs(rnd.nextInt()%length)];
		}
		
		for (int i = 0; i < freqs.length; i++) {
			System.out.println("Frequenza del valore " + i + " è " + freqs[i]);
		}
	}

}
risultato:
Codice:
Frequenza del valore 0 è 0
Frequenza del valore 1 è 1
Frequenza del valore 2 è 3
Frequenza del valore 3 è 1
Frequenza del valore 4 è 0
Frequenza del valore 5 è 1
Frequenza del valore 6 è 1
Frequenza del valore 7 è 1
Frequenza del valore 8 è 1
Frequenza del valore 9 è 1
poi ho messo:
Codice:
for (int i = 0; i < 100; i++) {
			++freqs[Math.abs(rnd.nextInt()%length)];
		}
al posto di:
Codice:
for (int i = 0; i < 10; i++) {
			++freqs[Math.abs(rnd.nextInt()%length)];
		}
risultato:
Codice:
Frequenza del valore 0 è 8
Frequenza del valore 1 è 8
Frequenza del valore 2 è 9
Frequenza del valore 3 è 8
Frequenza del valore 4 è 16
Frequenza del valore 5 è 6
Frequenza del valore 6 è 10
Frequenza del valore 7 è 7
Frequenza del valore 8 è 17
Frequenza del valore 9 è 11
poi ho messo 1000 al posto di 100

risultato:
Codice:
Frequenza del valore 0 è 106
Frequenza del valore 1 è 107
Frequenza del valore 2 è 112
Frequenza del valore 3 è 97
Frequenza del valore 4 è 102
Frequenza del valore 5 è 83
Frequenza del valore 6 è 105
Frequenza del valore 7 è 95
Frequenza del valore 8 è 88
Frequenza del valore 9 è 105
poi con 10000 al posto di 1000

risultato:
Codice:
Frequenza del valore 0 è 1028
Frequenza del valore 1 è 980
Frequenza del valore 2 è 976
Frequenza del valore 3 è 1027
Frequenza del valore 4 è 1038
Frequenza del valore 5 è 1003
Frequenza del valore 6 è 1036
Frequenza del valore 7 è 939
Frequenza del valore 8 è 1009
Frequenza del valore 9 è 964
con 100000:
Codice:
Frequenza del valore 0 è 9996
Frequenza del valore 1 è 10067
Frequenza del valore 2 è 9998
Frequenza del valore 3 è 9905
Frequenza del valore 4 è 10030
Frequenza del valore 5 è 9844
Frequenza del valore 6 è 10009
Frequenza del valore 7 è 10045
Frequenza del valore 8 è 9965
Frequenza del valore 9 è 10141
come si può vedere il risultato è già accettabile con 1000 iterazioni

Ultima modifica di k0nt3 : 20-06-2007 alle 15:21.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:19   #15
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
ti posto la sequenza generata con 10 estrazioni random (Random.nextInt()%4):
-3 0 1 2 0 -3 1 -1 2 0 -3.

Mi chiedo da dove spuntino quei numeri negativi però.
Random.nextInt() genera un Int, non un Int positivo, quindi ci sono anche i numeri negativi. per questo io ho usato Math.abs()
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:22   #16
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
con 1000000000 iterazioni
Codice:
Frequenza del valore 0 è 100007141
Frequenza del valore 1 è 99986788
Frequenza del valore 2 è 100004692
Frequenza del valore 3 è 100000778
Frequenza del valore 4 è 99997784
Frequenza del valore 5 è 99999491
Frequenza del valore 6 è 99996712
Frequenza del valore 7 è 100006047
Frequenza del valore 8 è 99993754
Frequenza del valore 9 è 100006813
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:26   #17
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
converrai con me che per l' utilizzo in un array ridotto ad esempio la cadenza non sarebbe cmq accettabilissima.

Il mio errore dipendeva dal fatto che su documentazione non ufficiale avevo letto che nextInt restituiva un numero positivo.

Perdonami un' ultima cosa: la divisione in modulo dovrebbe però essere trasparente al segno,essendo essenzilamente il resto della divisione?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:34   #18
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
converrai con me che per l' utilizzo in un array ridotto ad esempio la cadenza non sarebbe cmq accettabilissima.

Il mio errore dipendeva dal fatto che su documentazione non ufficiale avevo letto che nextInt restituiva un numero positivo.

Perdonami un' ultima cosa: la divisione in modulo dovrebbe però essere trasparente al segno,essendo essenzilamente il resto della divisione?
in java è definito così quindi mi fido http://java.sun.com/docs/books/jls/t...ns.html#239829 un pò più sotto "Remainder Operator %"

per il fatto che non è uniforme sui piccoli numeri non ci si può fare niente.. se vuoi numeri che assomigliano veramente a numeri casuali l'uniformità sui piccoli numeri viene a mancare per definizione
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:37   #19
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7262
quello che conta più che altro è che eseguendo numerosi run dell'applicazione ho sempre distribuzioni diverse e quindi compensandosi vanno a creare l'uniformità di cui sopra.
es:
1° run
Codice:
Frequenza del valore 0 è 0
Frequenza del valore 1 è 2
Frequenza del valore 2 è 0
Frequenza del valore 3 è 0
Frequenza del valore 4 è 1
Frequenza del valore 5 è 4
Frequenza del valore 6 è 2
Frequenza del valore 7 è 1
Frequenza del valore 8 è 0
Frequenza del valore 9 è 0
2° run
Codice:
Frequenza del valore 0 è 1
Frequenza del valore 1 è 2
Frequenza del valore 2 è 1
Frequenza del valore 3 è 1
Frequenza del valore 4 è 0
Frequenza del valore 5 è 0
Frequenza del valore 6 è 1
Frequenza del valore 7 è 2
Frequenza del valore 8 è 2
Frequenza del valore 9 è 0
3° run
Codice:
Frequenza del valore 0 è 0
Frequenza del valore 1 è 2
Frequenza del valore 2 è 2
Frequenza del valore 3 è 1
Frequenza del valore 4 è 0
Frequenza del valore 5 è 0
Frequenza del valore 6 è 4
Frequenza del valore 7 è 0
Frequenza del valore 8 è 0
Frequenza del valore 9 è 1
ecc... a lungo andare le frequenze si uniformano
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2007, 15:42   #20
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
nn sapevo che java nell' operazione di modulo ntenesse conto del segno,personalmente non la trovo una soluzione corretta.

Ti riporto un' estratto della documentazione di cui parlavo,di cui nn faccio il nome:
int i = r.nextInt(int n) da’ un random int tra 0 e n
int i = r.nextInt() da’ un random int tra 0 e 2**32
evidentemente la seconda definizione è scorretta.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
John Wick torna in un nuovo videogioco a...
MADE chiude il 2025 con 59 partner e 250...
007 First Light: allo State of Play un n...
Gli iPhone su Amazon costano meno che su...
Credevi fosse un assistente IA, invece e...
God of War Trilogy Remake annunciato all...
Star Wars Galactic Racer mostra il gamep...
Legacy of Kain: Defiance Remastered annu...
Control Resonant si mostra allo State of...
Battlefield 6 Stagione 2: l'avanzata del...
Stop a umidità e muffa: deumidificatore ...
Trump l'anti-scientifico: la mossa per a...
Google ancora una volta nel mirino dell'...
Annunciata la data d'uscita di Death Str...
Conto alla rovescia per gli uffici: Micr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:40.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v