table of contents
- bookworm 4.18.1-1
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.24.0-2
RANDOM(3) | Manuel du programmeur Linux | RANDOM(3) |
NOM¶
random, srandom, initstate, setstate - Générateur de nombres aléatoires
SYNOPSIS¶
#include <stdlib.h>
long random(void); void srandom(unsigned int graine);
char *initstate(unsigned int graine, char *état, size_t n); char *setstate(char *état);
random(), srandom(), initstate(), setstate() :
_XOPEN_SOURCE >= 500
|| /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE
|| /* Versions <= 2.19 de la glibc : */ _BSD_SOURCE || _SVID_SOURCE
DESCRIPTION¶
La fonction random() utilise un générateur de nombre aléatoire non linéaire (« non-linear additive feedback random number generator ») utilisant une table par défaut de 31 entiers longs pour renvoyer successivement des nombres pseudoaléatoires entre 0 et 2^31 - 1. La période de ce générateur est très grande, approximativement 16 * ((2^31) - 1).
La fonction srandom() utilise son argument comme « graine » pour engendrer une nouvelle séquence de nombres pseudoaléatoires qui seront fournis lors des appels à random(). Ces séquences sont reproductibles en invoquant srandom() avec la même graine. Si aucune graine n'est fournie, La fonction random() utilise automatiquement une graine originale de valeur 1.
La fonction initstate() permet d'initialiser une table d'états state pour l'utiliser avec random(). La taille n de la table est utilisée par initstate() pour déterminer le niveau de sophistication du générateur de nombres aléatoires. Plus grande est la table d'états, meilleurs seront les nombres aléatoires. Les valeurs « optimales » pour la taille de la table d'états n sont 8, 32, 64, 128 et 256 octets ; les autres montants seront arrondis au montant connu le plus proche. Utiliser moins de huit octets provoque une erreur. graine est la graine utilisée pour l'initialisation, indiquant un point de départ pour la séquence de nombres aléatoires, et permet de redémarrer au même endroit.
La fonction setstate() modifie la table d'états utilisée par la fonction random(). La table d'états état est alors utilisée comme générateur de nombres aléatoires jusqu'au prochain appel de initstate() ou setstate(). état doit d'abord être initialisée avec initstate() ou être le résultat d'un appel précédent à setstate().
VALEUR RENVOYÉE¶
La fonction random() renvoie une valeur entre 0 et (2^31) - 1. La fonction srandom() ne renvoie pas de valeur.
La fonction initstate() renvoie un pointeur sur la table d'états précédente. En cas d'échec, elle renvoie NULL et errno contient le code d'erreur.
La fonction setstate() renvoie un pointeur sur la table d'états précédente. En cas d'échec, NULL est renvoyé et errno contient le code d'erreur.
ERREURS¶
ATTRIBUTS¶
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface | Attribut | Valeur |
random(), srandom(), initstate(), setstate() | Sécurité des threads | MT-Safe |
CONFORMITɶ
POSIX.1-2001, POSIX.1-2008, 4.3BSD.
NOTES¶
La fonction random() ne doit pas être utilisée dans des programmes multithreadés où le comportement doit être reproductible. Utilisez random_r(3) dans ce cas.
La génération de nombres aléatoires est un sujet complexe. Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling ; New York : Cambridge University Press, 2007, 3e éd.) fournit une excellente discussion sur les problèmes pratiques de génération de noms aléatoires dans le chapitre 7 (Random Numbers).
Pour une discussion plus théorique, qui aborde également en profondeur d'autres domaines, voir le chapitre 3 (Random Numbers) du livre de Donald E. Knuth The Art of Computer Programming, volume 2 (Seminumerical Algorithms), 2e éd. ; Reading, Massachusetts : Addison-Wesley Publishing Company, 1981.
BOGUES¶
D'après POSIX, initstate() devrait renvoyer NULL en cas d'erreur. Dans la mise en œuvre de la glibc, errno est renseigné en cas d'erreur comme spécifié, mais la fonction ne renvoie pas NULL.
VOIR AUSSI¶
COLOPHON¶
Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION¶
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et bubu <bubub@no-log.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
22 mars 2021 | GNU |