2011-04-25 4 views
2

Désolé de déranger à nouveau, mais comme je suis nouveau C++ j'ai beaucoup de problèmes bizarres et stupides.Génération de nombre aléatoire avec Well44497a en C++

Je programme une méthode MCMC. J'ai lu dans ce forum que le WELL RNG était une bonne alternative pour générer des nombres aléatoires alors j'essaye de le faire fonctionner. Voici donc les questions suivantes:

  1. Je compilant les "Well44497a.c" dans mon C++ projet sans autres modifications. Il a compilé. Est-ce exact ou devrais-je faire un changement?

  2. J'utilise le schéma suivant dans mon code, mais il est juste générer un cycle de 3 RN

RESOLU: Le problème est que InitWELLRNG44497a (état) doit être placé en dehors de la fonction. Je recommençais le générateur chaque fois que je produisais un échantillon. Pour toute la durée, le générateur doit être initialisé une seule fois.

int* sampler(PARAMETERS) { //this function returns a sample 

    int k; 

    unsigned int state[1391]; 

    for (k = 0; k < 1391; ++k) 
    { 
     state[k] = k; 
    } 

    InitWELLRNG44497a(state); //THIS SHOULD GO ON THE CALLER FUNCTION NOT HERE 

    double value_first = valuate(first_state); // this function valuates one of two possible states 
    double value_second = valuate(second_state); 

    double rand_number = WELLRNG44497a() 

    if(rand_number > value_first/(value_first + value_second)) 
     return second_state; 
    else 
     return first_state; 
    }   
+1

Pouvez-vous poster tout votre code? Vous avez seulement montré un appel au RNG. –

+0

merci, j'ai ajouté plus ou moins une base de la fonction. J'espère que c'est plus clair maintenant – Altober

Répondre

1

Votre fonction semble initialiser le tableau state avec les mêmes valeurs chaque fois que vous appelez votre fonction sampler(). L'idée du tableau state est qu'il contient l'état actuel du générateur de nombres aléatoires, et que vous ne manipulez pas le contenu de state entre les appels au RNG.

Rendez le tableau state global dans votre programme, initialisez-le une fois et ne le touchez pas après l'initialisation.

+0

Oui je l'ai eu, merci beaucoup greg – Altober