Problema generazione numeri casuali

di il
2 risposte

Problema generazione numeri casuali

Ciao a tutti, come da titolo ho dei problemi a generare dei numeri pseudo-casuali che siano equiprobabili.
Vi allego il codice:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#define DIM  50000
#define CICLO 1000000000
#define MEDIA CICLO/DIM
int Rand(int min,int max){
    int num=min,i=(max-min)/RAND_MAX,agg=0;
    while(i>0){
        num+=rand();
        i--;
        agg+=RAND_MAX;
    }
    if(agg<(max-min))
        num+=rand()%(max+1-min-agg);
    return num;
}

int main()
{
    srand(time(NULL));
    int v[DIM]={0},i;
    FILE *f=fopen("prova.txt","w");
    for(i=0;i<CICLO;i++){
        v[Rand(5,DIM-1)]++;
    }
    fprintf(f,"Media apparizione ogni numero: %d\n\n",MEDIA);
    for(i=0;i<DIM;i++)
       fprintf(f,"%5d. <%d>\n",i,v[i]);
    return 0;
}
L'obiettivo è quello di costruire una funzione che genera un numero casuale (equiprobabile) su un range di valore maggiore di RAND_MAX.
L'idea che è stata usata è sommare rand() ad una variabile tante volte quante max/RAND_MAX.
Il problema è che cosi perdo l'equiprobabilità di ogni numero, per questo vi allego prova.txt(zippato) che contiene quante volte sono stati estratti ogni singolo numero.
prova.rar
prova.rar

Ho provate anche in un altro modo, cioè a dilatare il numero estratto da rand(), ma in questo modo non vengono estratti tutti i valori.
Se avete qualche idea ve ne sarei molto grato.

2 Risposte

  • Re: Problema generazione numeri casuali

    Ci sono dei teoremi di statistica che dimostrano che se usi N volte un generatore di numeri pseudocasuali (il generatore genera numeri con una distribuzione uniforme!) per generre un nuovo numero pseudocasuale, quello che ottieni e' una distribuzione GAUSSIANA!

    Quindi la strada che stai seguendo e' DIMOSTRABILMENTE sbagliata.

    L'idea piu' importante e' STUDIARE!

    La seconda, e' quella di generare un GENERATORE DI NUMERI CASUALI nuovo, che soddisfi il range di valori che ti serve.

    Un buon generatore e' il Mersenne Twister!
  • Re: Problema generazione numeri casuali

    Ciao migliorabile, grazie per la risposta mi è stata molto utile, escluso il tuo parere sullo studiare (che sto già facendo), di poca utilità e alquanto irritante.
    Comunque guardando il file txt infatti si nota proprio ciò che dici tu!!! Grazie ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte