Autore Topic: funzione random  (Letto 2440 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
funzione random
« il: 17 Marzo 2008, 22:59:46 »
questa non è proprio una segnaazione bug ma solo una piccola considerazione.

leggendo vari esempi o programmi vari ho visto spesso utilizzare questa formulazione per generare un numero pseudocasuale:

Codice: [Seleziona]
RANDOMIZE

numero= rnd(valore1, valore2)




utilizzando spesso la funzione randomize e non essendone molto soddisfatto(vista l' alta ripetitività dei numeri randomizzati)ho realizzato un programmino per verificarne la funzionalità.

in pratica viene disegnata una sfera all'interno di una DrawingArea indicando come cordinate dei numeri casuali.

risultato:

con questo codice
Codice: [Seleziona]
 RANDOMIZE 
        x = Rnd(0, 600)
      RANDOMIZE    
        y = Rnd(0, 600)

si è presentata un altissima ripetitività

con questo codice
Codice: [Seleziona]
 RANDOMIZE 
        x = Rnd(0, 600)
        y = Rnd(0, 600)

si è diminuita notevolmente la ripetitività
in fine non inserendo alcun RANDOMIZE
Codice: [Seleziona]
 
        x = Rnd(0, 600)
        y = Rnd(0, 600)

il risultato è stato molto ma molto più casuale.

se volete vedere questi risultati graficamente vi posto il programmino


ho notato inoltre (e qui forse c'è un piccolo bug) che indicando i valori della funzione " rnd" non viene mai utilizzato il valore finale
ovvero :
Codice: [Seleziona]
x=rnd(0,5)

ritornera dei valori compresi tra 0 e 4  e non tra 0 e 5 come dovrebbe.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: funzione random
« Risposta #1 il: 18 Marzo 2008, 20:43:41 »
Il comando RANDOMIZE credo vada dichiarato solo una volta, all'inizio del programma. Se reinizializzi ogni volta il generatore, è probabile che ripeta gli stessi numeri.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: funzione random
« Risposta #2 il: 18 Marzo 2008, 21:26:57 »
si infattti è cosi,
però è particolare che la casualità migliora se non si utilizza il randomize .

se non ricordo male invece nel vecchio gambas 1 era il contrario.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: funzione random
« Risposta #3 il: 19 Marzo 2008, 02:00:12 »
La funzione Rnd(min, max) restituisce un numero in virgola mobile _compreso_ fra min e max, quindi esclude sempre l'estremo massimo.
rnd(0,5) restituisce sempre numeri fra 0 e 4.9999999999999, per capirsi.

Infatti nella documentazione si legge proprio questa cosa:
Citazione

Note that the higher born of the interval is never returned.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: funzione random
« Risposta #4 il: 19 Marzo 2008, 21:01:58 »
Prova forse ad allargare il range delle probabilità... del tipo 1-1000...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: funzione random
« Risposta #5 il: 20 Marzo 2008, 18:49:43 »
Codice: [Seleziona]

numero_casuale = Int(Rnd*5.1)

A me restituisce interi fra 0 e 5 compresi.
Visita il mio sito personale: http://www.leonardomiliani.com