2010-09-30 4 views

Répondre

1

Je suppose que vous pouvez le faire avec rand:

for (int i = 0; i < M; i++) 
{ 
    v.push_back(rand()%(2*K)-K; 
} 

Mais je dois en savoir plus sur votre question. Est l'intervalle [-K, K] ou (-K, K)? Est-ce que vous incluez -K et K ou pas?

+2

L'utilisation du module polarise le résultat si la taille de l'intervalle de sortie ne divise pas de manière égale RAND_MAX. – caf

+0

Oui, c'est vrai. Gardez cela à l'esprit, neversaint. Pour un K plus petit, il sera moins biaisé, mais quand vous vous rapprocherez de la valeur maximum pour le rand, vous allez vraiment gâcher les choses! – JoshD

+0

Point secondaire, mais vous pouvez vouloir v.reserve (M); avant la boucle, le vecteur ne se réalloue pas encore et encore tant qu'il n'est pas assez grand. (dans la plupart des cas, la capacité sera supérieure à M) – KSchmidt

4

Je recommanderais d'utiliser le Mersenne Twister pour générer des variables aléatoires uniformes. Si vous générez un écart uniforme u ~ [0,1] alors (2 * K) * u - K sera ~ [-K, K].

+2

Je pense que certains déviates en uniforme vont à l'école privée près d'ici. – caf

Questions connexes