Problema generazione numeri casuali

di Anonimizzato16418 il
2 risposte
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

  • 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!
  • 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