Maison  >  Article  >  développement back-end  >  Explication détaillée de la fonction de nombres aléatoires en C++

Explication détaillée de la fonction de nombres aléatoires en C++

王林
王林original
2023-11-18 16:08:271474parcourir

Explication détaillée de la fonction de nombres aléatoires en C++

Explication détaillée de la fonction de nombre aléatoire en C++

Le nombre aléatoire joue un rôle important dans la programmation informatique. Il peut être utilisé pour simuler des événements aléatoires, générer des séquences de nombres aléatoires et d'autres applications. Le langage C++ fournit une série de fonctions de nombres aléatoires pour permettre aux développeurs de générer et d'appliquer des nombres aléatoires. Cet article présentera en détail l'utilisation et les précautions de la fonction de nombres aléatoires en C++.

En C++, la fonction de nombres aléatoires comprend principalement deux aspects : la fonction de génération de nombres pseudo-aléatoires et la fonction de nombres aléatoires auxiliaire.

Tout d’abord, introduisons la fonction de génération de nombres pseudo-aléatoires en C++. La bibliothèque de nombres aléatoires <random></random> introduite dans C++11 fournit une fonction de génération de nombres pseudo-aléatoires plus flexible et plus efficace. Il comprend principalement les classes importantes suivantes : <random></random> 提供了更加灵活和高效的伪随机数生成函数。其主要包括以下几个重要的类:

  1. std::random_device:该类用于生成真正的随机数种子,可以通过硬件随机数发生器或操作系统提供的随机数接口来获得。
  2. std::seed_seq:该类用于生成随机数种子序列,可以将多个种子值组合在一起生成种子序列,提供更加复杂的随机数生成方式。
  3. std::mt19937std::mt19937_64:这两个类是伪随机数引擎,它们使用梅森旋转算法生成高质量的伪随机数序列。std::mt19937使用32位整数作为状态,std::mt19937_64使用64位整数作为状态。
  4. std::uniform_int_distributionstd::uniform_real_distribution:这两个类是均匀分布的随机数分布器。std::uniform_int_distribution用于生成均匀分布的整数随机数,std::uniform_real_distribution用于生成均匀分布的实数随机数。

使用这些类可以实现伪随机数的生成。首先,我们需要使用 std::random_device 生成一个真正的随机数种子。然后,通过伪随机数引擎 std::mt19937std::mt19937_64 使用种子初始化,再使用分布器 std::uniform_int_distributionstd::uniform_real_distribution 生成随机数。

下面是一段示例代码,演示了如何生成一个均匀分布的整数随机数:

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);

    for (int i = 0; i < 10; ++i) {
        std::cout << dis(gen) << " ";
    }

    return 0;
}

运行上述代码,将会输出10个在1到100之间的随机整数。

除了伪随机数生成函数外,C++中还提供了一些辅助随机数函数,用于更方便地处理随机数。其中包括:

  1. std::rand:该函数生成一个0到RAND_MAX之间的伪随机整数,默认的RAND_MAX值为32767。需要注意的是,rand函数通常使用std::srand设置随机数种子,但是它只能生成相对较低质量的随机数。
  2. std::srand:该函数用于设置伪随机数生成器的种子值。一般来说,我们可以使用系统时间作为种子值,以保证每次运行程序生成的随机数序列都是不同的。
  3. std::shuffle:该函数用于随机打乱一个序列。它接受两个迭代器参数,将这段序列根据当前的伪随机数生成器重新排列。

辅助随机数函数通常是以C风格的函数(如randsrand

  1. std::random_device : Cette classe est utilisée pour générer de véritables graines de nombres aléatoires, qui peuvent être générées via un générateur de nombres aléatoires matériel ou le système d'exploitation Fourni une interface de nombres aléatoires à obtenir.
  2. std::seed_seq : cette classe est utilisée pour générer une séquence de départ de nombres aléatoires. Plusieurs valeurs de départ peuvent être combinées ensemble pour générer une séquence de départ, fournissant ainsi un résultat plus complexe. méthode de génération de nombres aléatoires.
  3. std::mt19937, std::mt19937_64 : ces deux classes sont des moteurs de nombres pseudo-aléatoires qui utilisent l'algorithme de rotation de Mersenne pour générer des valeurs élevées. qualité Séquence de nombres pseudo-aléatoires. std::mt19937 utilise un entier de 32 bits comme statut et std::mt19937_64 utilise un entier de 64 bits comme statut.
  4. std::uniform_int_distribution, std::uniform_real_distribution : ces deux classes sont des distributeurs de nombres aléatoires uniformément distribués. std::uniform_int_distribution est utilisé pour générer des nombres aléatoires entiers uniformément distribués, et std::uniform_real_distribution est utilisé pour générer des nombres aléatoires réels uniformément distribués.
Utilisez ces classes pour générer des nombres pseudo-aléatoires. Tout d'abord, nous devons utiliser std::random_device pour générer une véritable graine de nombre aléatoire. Ensuite, utilisez l'initialisation des graines via le moteur de nombres pseudo-aléatoires std::mt19937 ou std::mt19937_64, puis utilisez le distributeur std::uniform_int_distribution code> ou <code>std::uniform_real_distribution génère des nombres aléatoires.

Ce qui suit est un exemple de code qui montre comment générer un nombre aléatoire entier uniformément distribué :

rrreee

Exécutez le code ci-dessus et 10 entiers aléatoires entre 1 et 100 seront générés. 🎜🎜En plus de la fonction de génération de nombres pseudo-aléatoires, C++ fournit également des fonctions auxiliaires de nombres aléatoires pour gérer plus facilement les nombres aléatoires. Ceux-ci incluent : 🎜
  1. std::rand : cette fonction génère un entier pseudo-aléatoire compris entre 0 et RAND_MAX, la valeur par défaut est RAND_MAXLa valeur est 32767. Il convient de noter que la fonction <code>rand utilise généralement std::srand pour définir la valeur de départ du nombre aléatoire, mais elle ne peut générer que des nombres aléatoires de qualité relativement faible.
  2. std::srand : Cette fonction est utilisée pour définir la valeur de départ du générateur de nombres pseudo-aléatoires. De manière générale, nous pouvons utiliser l'heure du système comme valeur de départ pour garantir que la séquence de nombres aléatoires générée par le programme est différente à chaque exécution.
  3. std::shuffle : Cette fonction est utilisée pour mélanger aléatoirement une séquence. Il accepte deux paramètres d'itérateur et réorganise la séquence en fonction du générateur de nombres pseudo-aléatoires actuel.
🎜Les fonctions auxiliaires de nombres aléatoires existent généralement sous la forme de fonctions de style C (telles que rand et srand), qui sont plus simples et plus direct à utiliser. Cependant, les nombres aléatoires générés par ces fonctions sont de mauvaise qualité et leur utilisation n’est pas recommandée dans le développement réel. En revanche, l’utilisation de la bibliothèque de nombres aléatoires fournie par C++11 est plus flexible et efficace. 🎜🎜Pour résumer, C++ fournit une série de fonctions de nombres aléatoires, notamment des fonctions de génération de nombres pseudo-aléatoires et des fonctions auxiliaires de nombres aléatoires. Parmi elles, la fonction de génération de nombres pseudo-aléatoires est plus flexible et plus efficace à utiliser, et son utilisation est recommandée dans le développement réel. Si vous avez besoin d'un moyen plus simple et plus direct de générer des nombres aléatoires, envisagez d'utiliser la fonction auxiliaire de nombres aléatoires. Lorsque vous utilisez une fonction de nombres aléatoires, vous devez faire attention à définir une valeur de départ de nombres aléatoires appropriée pour garantir que la séquence de nombres aléatoires générée est de haute qualité et indépendante. 🎜🎜J'espère que l'introduction de cet article pourra aider les lecteurs à mieux comprendre et appliquer la fonction de nombre aléatoire en C++. Si vous souhaitez utiliser des fonctions liées aux nombres aléatoires, il est recommandé d'utiliser la bibliothèque de nombres aléatoires introduite en C++11 pour profiter pleinement de sa flexibilité et de son efficacité. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn