Je dois générer des nombres dans la plage [-100; +2000] en C++. Comment puis-je faire cela avec rand s'il n'y a que des nombres positifs disponibles? Y a-t-il des moyens rapides?Numéros aléatoires et négatifs
Répondre
générer un nombre aléatoire entre 0 et 2100 puis soustrayez 100.
Une recherche rapide Google se un decent looking article on using Rand(). Il comprend des exemples de code pour travailler avec une gamme spécifique à la fin de l'article.
Pouvez-vous générer un nombre de 0-2100 et soustraire 100?
générer un nombre aléatoire entre 0 et 2100, et soustrayez 100.
Voici le code.
#include <cstdlib>
#include <ctime>
int main()
{
srand((unsigned)time(0));
int min = 999, max = -1;
for(size_t i = 0; i < 100000; ++i)
{
int val = (rand()%2101)-100;
if(val < min) min = val;
if(val > max) max = val;
}
}
Actuellement ma syntaxe C++ est un peu rouillé, mais vous devez écrire une fonction qui prend deux paramètres: size
et offset
.
Vous générez ainsi des nombres avec le size
donné comme valeur maximale et ajoutez ensuite le décalage (négatif).
La fonction ressemblerait à ceci:
int GetRandom(int size, int offset = 0);
et serait appelé dans votre cas:
int myValue = GetRandom(2100, -100);
En C++ 0x ils illumineront cette d'offrir un meilleur soutien avec un bibliothèque standard.
Vous pouvez utiliser les fonctions aléatoires C++ TR1 pour générer des nombres dans la distribution souhaitée.
std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int<int> dist(-100,2100);
std::cout << dist(rng) << '\n';
Pour ceux sans TR1, boost :: random est assez proche. – MSalters
Ceci ne donnera pas une distribution égale! De plus, trouver le minimum et le maximum de 100 000 tels nombres n'est pas pertinent à la question. – darklon
Aussi, si par hasard 'val' était' -100' à chaque fois, le 'max' résultant serait faux. Idem pour le minimum. –
@Cornelius, @Ben: Qui s'en soucie? C'est juste une démo. Si j'avais posté juste '(rand()% 2101) -100' qui aurait été mieux qu'un échantillon compilable et exécutable? S'il vous plaît. –