Je voudrais générer un nombre à virgule flottante aléatoire entre 2 valeurs. Quelle est la meilleure façon de le faire en C#?Comment générer un nombre aléatoire en C#?
Répondre
La seule chose que j'ajouterais à la réponse de Eric est une explication; Je pense que la connaissance de la raison pour laquelle le code fonctionne est meilleure que de savoir quel code fonctionne. L'explication est la suivante: disons que vous voulez un nombre entre 2.5 et 4.5. La plage est de 2,0 (4,5 - 2,5). NextDouble
renvoie uniquement un nombre compris entre 0 et 1,0, mais si vous le multipliez par la plage, vous obtiendrez un nombre entre 0 et plage.
Donc, cela nous donnerait double au hasard entre 0,0 et 2,0:
rng.NextDouble() * 2.0
Mais, nous voulons entre 2,5 et 4,5! Comment faisons-nous cela? Ajouter le plus petit nombre, 2,5:
2.5 + rng.NextDouble() * 2.0
Maintenant, nous obtenons un nombre entre 0.0 et 2.0; si vous ajoutez 2,5 à chacune de ces valeurs, nous voyons que la plage est maintenant comprise entre 2,5 et 4,5. Au début, je pensais que cela importait si b> a ou a> b, mais si vous travaillez dans les deux sens, vous trouverez que cela fonctionne à l'identique tant que vous ne dérangez pas l'ordre des variables utilisé. Je tiens à exprimer avec des noms de variables plus donc je ne suis pas mêlé:
double NextDouble(Random rng, double min, double max) { return min + (rng.NextDouble() * (max - min)); }
// generate a random number starting with 5 and less than 15
Random r = new Random();
int num = r.Next(5, 15);
double: vous pouvez remplacer suivante avec NextDouble
System.Random r = new System.Random();
double rnd(double a, double b)
{
return a + r.NextDouble()*(b-a);
}
Comment hasard? Si vous pouvez traiter pseudo-aléatoire alors simplement:
Random randNum = new Random();
randNum. NextDouble(Min, Max);
Si vous voulez un « meilleur » nombre aléatoire, alors vous devriez probablement regarder l'algorithme Mersenne Twister. Beaucoup de gens ont already implemented it pour vous si
Voici un extrait de la façon d'obtenir des nombres aléatoires Cryographically sûrs: Cela remplira les 8 octets avec une forte crytographically séquence de valeurs aléatoires.
byte[] salt = new byte[8];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(salt);
Pour plus de détails, voir How Random is your Random??" (inspiré par un article CodingHorror sur shuffling pont)
Pour une explication des raisons pour lesquelles Longhorn a été downmodded tant: http://msdn.microsoft.com/en-us/magazine/cc163367.aspx Recherchez la mise en œuvre de NextDouble et l'explication de ce est un double aléatoire. Ce lien est également un exemple goo de la façon d'utiliser des nombres aléatoires cryptographiques (comme Sameer mentionné) seulement avec des sorties utiles réelles au lieu d'un flux binaire.
- 1. Nombre entier aléatoire C++
- 2. Générer une énumération aléatoire en C# 2.0
- 3. Nombre hexadécimal généré de manière aléatoire en C#
- 4. Nombre aléatoire non répétitif
- 5. Générer un nombre de plages pour un ensemble aléatoire de valeurs
- 6. Comment générer un nombre aléatoire avec Java à partir d'une liste de nombres donnés
- 7. Générer un terrain aléatoire dans Blender3D
- 8. Nombre aléatoire entre 2 nombres doubles
- 9. Nombre aléatoire: 0 ou 1
- 10. Conserver un nombre aléatoire parmi différentes fonctions dans Cocoa?
- 11. Comment formater un nombre décimal en un nombre de décimales contrôlé par programme dans C#?
- 12. Est-ce que validates_uniqueness_of travail pour générer un jeton aléatoire?
- 13. Générateur de nombre aléatoire dans CUDA
- 14. Générer un document word en C#
- 15. Comment générer une URL conviviale en C#?
- 16. Générer les partitions d'un nombre
- 17. Comment arrondis-tu un nombre à deux décimales en C#?
- 18. Comment convertir un nombre en octet?
- 19. Devinez un nombre - Ruby en ligne
- 20. Comment générer un numéro de type RNGCryptoServiceProvider dans TSQL
- 21. Comment générer un tinyurl en Delphi
- 22. Obj. C - Aléatoire @property error
- 23. Comment sélectionner un élément aléatoire d'un tableau en Python?
- 24. Comment obtenir un nombre aléatoire dans une boîte à outils de modèle?
- 25. Générer des valeurs aléatoires en C#
- 26. Générer un hachage de document XML en C#
- 27. Comment arrondir un nombre en PHP?
- 28. Générer une position d'élément aléatoire et éviter le chevauchement en JavaScript
- 29. Comment générer des proxys d'interopérabilité COM en code source C#?
- 30. Comment générer un fichier XML
Ce n'est pas réellement précis. NextDouble génère seulement entre 0.0 et 1.0. – Bloodyaugust
NextDouble() ne prend aucun argument de ce que je peux voir. –