Delucidazione matematica su generazione random
Mi è servito dover generare randomicamente, una delle possibili 8 celle adiacenti ad una cella di una matrice.
In Java ci sono riuscito così ed è funzionante:
Vorrei una spiegazione matematica : ho una funzione (Math.random()) che mi genera casualmente valori tra 0.0 e 0.9.
Sfruttando questa funzione come genero valori casuali in un intervallo [x,y] ? Perchè devo moltiplicarla per max+1?
Ciao
In Java ci sono riuscito così ed è funzionante:
int a = (int) Math.floor( Math.random() * (((x+1)-(x-1))+1)+x-1); //max-min+1 + min int o = (int) Math.floor( Math.random() * (((y+1)-(y-1))+1)+y-1);
Vorrei una spiegazione matematica : ho una funzione (Math.random()) che mi genera casualmente valori tra 0.0 e 0.9.
Sfruttando questa funzione come genero valori casuali in un intervallo [x,y] ? Perchè devo moltiplicarla per max+1?
Ciao

Risposte
Il generatore pseudocasuale di numeri dovrebbe restituire valori compresi nell'intervallo $ [0,1[ $ con una distribuzione che imita quella uniforme. Se a te interessano valori interi in un intervallo $ [x,y] $ devi:
1) contare quanti interi appartengono a quell'intervallo. La risposta non è $ y-x $, ma $ y-x+1 $, e ci arrivi facilmente da solo;
2) moltiplicare per il risultato precedente il numero restituito dal generatore ed arrotondare per difetto il prodotto;
3) sommare $ x $ al risultato precedente.
Se, come hai fatto, preferisci sommare $ x $ prima dell'arrotondamento, il risultato, dal punto di vista matematico, è il medesimo, da quello informatico saprai tu cosa è meglio.
Ciao
B.
PS In merito allo spezzone di codice che proponi; visto che, per qualunque $ x $, $ (x+1)-(x-1)+1=3 $, perché non moltiplicare direttamente per $ 3 $?
1) contare quanti interi appartengono a quell'intervallo. La risposta non è $ y-x $, ma $ y-x+1 $, e ci arrivi facilmente da solo;
2) moltiplicare per il risultato precedente il numero restituito dal generatore ed arrotondare per difetto il prodotto;
3) sommare $ x $ al risultato precedente.
Se, come hai fatto, preferisci sommare $ x $ prima dell'arrotondamento, il risultato, dal punto di vista matematico, è il medesimo, da quello informatico saprai tu cosa è meglio.
Ciao
B.
PS In merito allo spezzone di codice che proponi; visto che, per qualunque $ x $, $ (x+1)-(x-1)+1=3 $, perché non moltiplicare direttamente per $ 3 $?
Wow spiegazione più chiara non poteva esserci. Grazie mille
