Table des matières
Utilisation de la bibliothèque de C11
Malentendus et précautions courantes
Maison développement back-end C++ Génération de nombres aléatoires en c

Génération de nombres aléatoires en c

Jul 16, 2025 am 02:27 AM
c++ Génération de nombres aléatoires

Il existe deux façons principales de générer des nombres aléatoires dans C. 1. Utilisez la fonction Rand () dans et vous devez régler la graine avec SRAND (), mais le hasard est pauvre; 2. Il est recommandé d'utiliser la bibliothèque C 11

Génération de nombres aléatoires en c

La génération de nombres aléatoires est une exigence commune en programmation C, comme elle est utilisée dans le développement de jeux, les programmes de simulation ou la génération de données de test. C fournit plusieurs façons de le faire, mais il est facile d'écrire du code qui n'est pas efficace ou même faux sans comprendre le mécanisme derrière.

Génération de nombres aléatoires en c

Utilisez la fonction rand() dans <cstdlib></cstdlib>

C'est la méthode la plus ancienne mais aussi la plus courante. rand() renvoie un entier entre 0 et RAND_MAX (généralement 32767).

 #include <iostream>
#include <cstdlib>
#include <ctime>

int main () {
    std :: srand (std :: time (0)); // définir la graine aléatoire int randomnum = std :: rand (); // Générer le nombre aléatoire std :: cout << randomnum << std :: endl;
    retour 0;
}
  • srand() est utilisé pour régler la graine. Si une graine différente est utilisée pour chaque exécution (comme l'heure actuelle), la séquence aléatoire générée à chaque fois que le programme s'exécute sera différente.
  • Si srand() n'est pas appelé, le programme générera la même séquence "aléatoire" à chaque fois qu'elle s'exécute.
  • Le problème avec cette méthode est l'uniformité et la prévisibilité, et ne convient pas aux scénarios avec des exigences de haute qualité.

Utilisation de la bibliothèque <random> de C11

Si vous utilisez C 11 ou version ultérieure, il est recommandé d'utiliser une bibliothèque <random> plus moderne, ce qui offre plus de contrôle et de meilleure qualité de l'aléatoire.

Génération de nombres aléatoires en c
 #include <iostream>
#include <Ampand>

int main () {
    std :: random_device rd; // Source d&#39;entropie matérielle, utilisée pour générer des graines STD :: MT19937 Gen (RD ()); // moteur utilisant l&#39;algorithme de rotation de Mason Std :: Uniform_int_distribution <> Distrib (1, 100); // plage [1, 100]

    int randomnum = distrib (gen);
    std :: cout << randomnum << std :: endl;

    retour 0;
}
  • std::random_device est un générateur de nombres aléatoires non déterministes qui est couramment utilisé pour initialiser d'autres moteurs.
  • std::mt19937 est un générateur de nombres pseudo-aléatoires couramment utilisé avec de longs cycles et des vitesses rapides.
  • Des objets de distribution tels que uniform_int_distribution peuvent contrôler la plage et le type de distribution des nombres générés (tels que la distribution normale, la distribution de Poisson, etc.).

Malentendus et précautions courantes

  • Ne définissez pas à plusieurs reprises des graines : par exemple, appelez srand(time(0)) à plusieurs reprises dans une boucle, ce qui fera que la séquence générée deviendra "moins aléatoire".
  • Évitez la plage de contrôle modulo direct : l'écriture telle que rand() % 100 peut provoquer une distribution inégale, surtout si la plage n'est pas un facteur de Rand_max 1.
  • C 11 <random> est plus fiable : bien que le code soit un peu plus complexe, il peut offrir un meilleur aléatoire et une meilleure flexibilité, adaptés à la plupart des scénarios d'application.
  • Le comportement multiplateforme peut être différent : en particulier la mise en œuvre de rand() , qui peut se comporter de manière incohérente entre les différents compilateurs.

Fondamentalement, c'est tout. La génération de nombres aléatoires semble simple, mais pour être vraiment bon, vous devez toujours faire attention aux détails.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Rimworld Odyssey Comment pêcher
1 Il y a quelques mois By Jack chen
Puis-je avoir deux comptes Alipay?
1 Il y a quelques mois By 下次还敢
Guide du débutant de Rimworld: Odyssey
1 Il y a quelques mois By Jack chen
Porce de variable PHP expliquée
3 Il y a quelques semaines By 百草

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1508
276
C Trouver dans l'exemple vectoriel C Trouver dans l'exemple vectoriel Aug 02, 2025 am 08:40 AM

La méthode la plus courante pour trouver des éléments vectoriels en C est d'utiliser STD :: Find. 1. Utilisez STD :: Rechercher pour rechercher avec la plage d'itérateur et la valeur cible. En comparant si l'itérateur retourné est égal à fin (), nous pouvons juger si elle est trouvée; 2. Pour les types personnalisés ou les conditions complexes, STD :: Find_if doit être utilisé et les fonctions de prédicat ou les expressions de lambda doivent être transmises; 3. Lors de la recherche de types standard tels que des chaînes, vous pouvez directement passer la chaîne cible; 4. La complexité de chaque recherche est O (n), qui convient aux données à petite échelle. Pour des recherches fréquentes, vous devriez envisager d'utiliser STD :: SET ou STD :: UNCORD_SET. Cette méthode est simple, efficace et largement applicable à divers scénarios de recherche.

Qu'est-ce que succinct (prouver la pièce)? Comment fonctionner? Prouver l'économie des jetons et les prévisions de prix Qu'est-ce que succinct (prouver la pièce)? Comment fonctionner? Prouver l'économie des jetons et les prévisions de prix Aug 06, 2025 pm 06:42 PM

Répertoire Qu'est-ce qui est succinct (prouver) qui a créé succinct (prouver)? Quel capital-risque soutient succinct (prouver)? Comment succinct (prouv) fonctionne SP1ZKVM et Prover Network Technology Technology Cross-Chain Vérification Prouver des détenteurs de jetons de jeton Token Token Token Allocation Token Token Potentiels Token Prouver la prédiction de la communauté PROVET PROVE-TOKEN POUR POUR POUR LE TOKET PREMARKET Activités de négociation de trading Succ

C Exemple de tableau char à chaîne C Exemple de tableau char à chaîne Aug 02, 2025 am 05:52 AM

La réponse est: utilisez le constructeur Std :: String pour convertir le tableau char en chaîne std ::. Si le tableau contient l'intermédiaire «\ 0», la longueur doit être spécifiée. 1. Pour les chaînes de style C se terminant par '\ 0', utilisez Std :: Stringtr (chararray); pour terminer la conversion; 2. Si le tableau char contient le «\ 0» du milieu mais doit convertir les n caractères des premiers, utilisez Std :: stringstr (chararray, longueur); pour spécifier clairement la longueur; 3. Lors du traitement d'un tableau de taille fixe, assurez-vous qu'il se termine par «\ 0» puis convertissez-le; 4. Utiliser Str.Assign (Chararray, Chararray Strl

Quels sont les paramètres de lancement.json corrects pour déboguer une application C avec GDB sur Linux? Quels sont les paramètres de lancement.json corrects pour déboguer une application C avec GDB sur Linux? Aug 04, 2025 am 03:46 AM

TODEBUGAC ApplicationUsingGdBinVisualStudiocode, ConfigureTheLaUnch.jsonFileCorrectly; KeySettingSinclut IspecifierTheExECutablePathWith "Program", Définition "MIMODE" vers "GDB" et "Tapez" vers "CPPDBG"

Effacez-vous du vecteur tout en itérant Effacez-vous du vecteur tout en itérant Aug 05, 2025 am 09:16 AM

S'il itère lors de la suppression d'un élément, vous devez éviter d'utiliser un itérateur défaillant. ① La manière correcte consiste à l'utiliser = ve.erase (it) et à utiliser l'itérateur valide renvoyé par effacement pour continuer à traverser; ② L'idiome recommandé "effacer" pour la suppression par lots: Vec.erase (std :: retire_if (ve.begin (), ve.end (), condition), ve.end ()), qui est sûr et efficace; ③ Vous pouvez utiliser un itérateur inversé pour supprimer de l'arrière-plan à l'avant, la logique est claire, mais vous devez faire attention à la direction de l'état. Conclusion: Mettez toujours à jour l'itérateur avec la valeur de retour d'effacement, interdisant les opérations sur l'itérateur défaillant, sinon un comportement non défini en résultera.

C MUTEX Exemple C MUTEX Exemple Aug 03, 2025 am 08:43 AM

STD :: Mutex est utilisé pour protéger les ressources partagées pour empêcher la concurrence des données. Dans l'exemple, le verrouillage automatique et le déverrouillage de Std :: Lock_guard sont utilisés pour assurer la sécurité multi-thread; 1. Utilisation de STD :: Mutex et STD :: Lock_guard peut éviter les risques anormaux apportés par la gestion manuelle des verrous; 2. Les variables partagées telles que les compteurs doivent être protégées avec Mutex lors de la modification des multiples multiples; 3. La gestion des serrures de style Raii est recommandée pour garantir la sécurité des exceptions; 4. Évitez les blocs de non-blocs et plusieurs verrous dans un ordre fixe; 5. Tout scénario d'accès multi-thread aux ressources partagées doit utiliser la synchronisation Mutex, et le programme final sort correctement attendu: 10000 et réel: 10000.

C Exemple de mot-clé automatique C Exemple de mot-clé automatique Aug 05, 2025 am 08:58 AM

Theautokeywordinc décecestypeypeofaVariableFromitsInitializer, faisant du codécleanerandMoremainableable.1.itreduceSverbosity, en particulier avec des ennuifs de type.

C Exemple de répartition des balises C Exemple de répartition des balises Aug 05, 2025 am 05:30 AM

TagDispatching utilise des balises de type pour sélectionner la surcharge de fonction optimale pendant la période de compilation pour obtenir un polymorphisme efficace. 1. Utilisez Std :: Iterator_Traits pour obtenir la balise de catégorie Iterator; 2. Définissez plusieurs fonctions de surcharge DO_ADVANCE et traitez Random_Access_Iterator_Tag, Bidrectional_iterator_tag et Input_Iterator_Tag respectivement; 3. La fonction principale My_Advance appelle la version correspondante en fonction du type de balise dérivé pour s'assurer qu'il n'y a pas de surcharge d'exécution pendant la décision de la période de compilation; 4. Cette technologie est adoptée par des bibliothèques standard telles que STD :: Advance et prend en charge la personnalisation prolongée.

See all articles