Andrea Pescetti ha scritto:
> Oscar ha scritto:
>> ho fatto delle prove, ho messo in piedi la tua idea con 90 numeri e
>> una sola =Casuale()
>
> Mi interessa tornare sull'argomento per controllare che non ci sia un
>  colossale problema con la funzione CASUALE(), anche se credo di
> avere capito male io. Tu dici che hai scritto [=CASUALE()] in 90
> celle, ad esempio A1:A90?
>
>> in una cella ho fatto in modo che mi calcoli la somma dei numeri
>> che uscivano e sapendo che il risultato doveva essere 4095
>> S(1,2,x)=x/2*(x+1)
>
> E cosa c'entra una formula con numeri interi con il calcolo qui
> sopra, che produce numeri in virgola mobile? Allora usavi qualcosa
> tipo [=ARROTONDA.ECCESSO(CASUALE()*90;1)] in maniera da ottenere
> numeri interi tra 1 e 90? Oppure lo usavi semplicemente come stima
> per vedere che i tuoi numeri fossero "ben distribuiti"?
Anche io non sono molto d'accordo con questo metodo che è il limite di
una serie e quindi è approssimato con numeri reali. Io per verificare il
tutto ho usato la nota proprietà della somma di un intervallo di interi
consecutivi su una seconda colonna ottenuta con =RANGO(A1:A90;A1:A90)
che sta in B1:B90. Effettivamente talvolta ci sono numeri doppi ma la
stranezza è che non ce ne sono di ESATTAMENTE uguali in A1:A90 ma al
massimo di molto simili (differenze oltre l'ottavo decimale).
Per sciogliere il dubbio ho disabilitato il calcolo automatico e
provveduto a riordinare le colonne quando la somma è diversa da quella
attesa (5151) ed al più ho ritrovato numeri vicini ma non uguali.
>
>> ho tenuto premuto i pulsanti CTRL+SHIFT+F9 Ho constato che così
>> uscivano spesso numeri doppi
>
> Ecco, questo e' il punto che mi interessa chiarire. Come controllavi
> se c'erano doppioni? Facendo la somma? Guardare il totale e' un
> criterio che, anche se tu lo usassi solo per numeri interi (quindi
> con la formula modificata come scritto sopra) e' troppo debole: se ti
> esce per 45 volte "1" e per 45 volte "90", la somma torna lo stesso,
> ma i doppioni ci sono!
Pienamente d'accordo però ho fatto qualche verifica pure io sia sulla
colonna ottenuta con RANGO sia sulla colonna ottenuta con CASUALE() ed
effettivamente con CASUALE() non ci sono doppioni se utilizzi un numero
elevato di decimali (es 15) ma se ne usi mano di 8 ce ne sono
causaarrotondamenti. Comunque c'è qualcosa che non va perché con un
numero alto di decimali c'è periodicità 2 dell'ultima cifra (sempre 0 o
5) e delle ultime 3 tendenzialmente sempre dispari o 0.
>
>> mentre moltiplicando =Casuale()*Casuale() non ho avuto nessun
>> doppione per un paio di minuti di fila
>
> Questo testimonia che non ho capito bene cosa facevi. Se il
> generatore di numeri "casuali" di Calc e' valido (e dalle prove che
> ho fatto poco fa con la 3.0.1 direi che e' accettabile), usare
> "CASUALE()*CASUALE()" dovrebbe produrre numeri molto meno "casuali"
> del caso precedente, perche' schiacciati verso il basso: con
> "CASUALE()" hai che il 50% dei numeri prodotti e' tra 0 e 0.5 e il
> 50% tra 0.5 e 1; con "CASUALE()*CASUALE()" hai, in pieno accordo con
> la teoria, che ben piu' di meta' dei numeri risultanti e' tra 0 e
> 0.5.
Infatti è così però sia io che te abbiamo trascurato un piccolo
particolare e cioè che casuale() genera numeri casuali a partire da un
numero radice e quindi garantisce con circa 1 possibilità su 1 milione
che la stessa casuale() non generi consecutivamente lo stesso numero;
qui però ci sono 90 casuale() indipendenti che generano numeri casuali e
quindi effettivamente non si può escludere e nemmeno quantificare la
probabilità che il primo numero generato da 2 di loro sia lo stesso a
meno di conoscere l'implementazione del codice ed il criterio di scelta
della radice di generazione. Effettivamente nella pratica l'uso di
casuale()*casuale() sembra risolvere il problema (tutte le tue
considerazioni sulla distribuzione e sulla densità dei numeri generati
restano comunque valide).
>
> Anche il criterio empirico di sommare
> [=ARROTONDA.ECCESSO(CASUALE()*90;1)] (per 90 volte) e
> [=ARROTONDA.ECCESSO(CASUALE()*CASUALE()*90;1)] (sempre per 90 volte)
> produce i risultati previsti: la somma e' vicina al fatidico 4095 nel
>  primo caso, molto piu' bassa nel secondo.
>
> Insomma, io non riesco proprio a capire se in questo modo hai risolto
> il problema originario, cioe' ottenere i numeri interi da 1 a 90
> ordinati secondo una sequenza casuale. Se ce l'hai fatta, hai trovato
> un grosso bug in Calc, dato che la probabilita' di riuscirci, che
> puoi calcolare facilmente in Calc con
> [=PERMUTAZIONE(90;90)/PERMUTAZIONA(90;90)], e' lo 0,0000000000000%!
>
> O forse ho capito male io e tu NON hai risolto il problema
> originario... Se ce l'hai fatta per favore spiega esattamente quali
> formule hai usato e in quali celle, in modo che io possa aprire una
> segnalazione di bug se i numeri non sono abbastanza "casuali"!
In sostanza bisognerebbe fare in modo che sia la stessa CASUALE() a
generare tutti i 90 numeri oppure bisognerebbe creare una nuova funzione
MATR:CASUALE() che possa generare automaticamente una matrice di valori
casuali.
>
> Ciao, Andrea.
>
>
>
> ---------------------------------------------------------------------
>  To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For
> additional commands, e-mail: utenti-h...@it.openoffice.org
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org
For additional commands, e-mail: utenti-h...@it.openoffice.org

Rispondere a