Section courante

A propos

Section administrative du site

Un algorithme fort simple mais de plus en plus rare dans les livres, s'est le fonctionnement d'une fonction de générateur aléatoire. Je n'ai, entre autre, trouvé la formule dans aucun livre à l'exception de «ALGORITHMS, 1983, Edition Addison-Wesley, par Robert Sedgewick, page 33 à 44». Voici un petit programme inspiré de se livre, permettant d'effectuer la génération de nombre aléatoire statique en Pascal:

  1. Program RandomStatic;
  2. Const
  3.  m=100000000;
  4.  ml=10000;
  5.  b=31415821;
  6.  a:Integer=1;
  7.  
  8. Function Mult(p,q:Integer):Integer;
  9. Var
  10.  pl,p0,ql,q0:Integer;
  11. Begin
  12.  pl:=p div ml;
  13.  p0:=p mod ml;
  14.  ql:=q div ml;
  15.  q0:=q mod ml;
  16.  Mult:=(((p0*ql+pl*q0) mod ml)*ml+p0*q0) mod m;
  17. End;
  18.  
  19. Function Random:Integer;Begin
  20.  a:=(Mult(a,b)+1) mod m;
  21.  Random:=a;
  22. End;
  23.  
  24. Var
  25.  I:Integer;
  26.  
  27. BEGIN
  28.  WriteLn('Génération de 10 nombres aléatoires statique:');
  29.  For I:=1 to 10 do WriteLn(Random);
  30. END.

on obtiendra le résultat suivant:

Génération de 10 nombres aléatoires statique:
24078
-31305
9036
-3875
24890
-10509
-6568
-7303
-9178
-7185

Le résultat est toujours le même parce que la variable «a» contient invariablement la valeur 1 à chaque démarrage du programme. Pour changer cette situation, il faudra donc affecter le résultat d'une fonction d'horloge, comme «GetTickCount», pour provoquer une effet de «Randomize Timer» du bon vieux BASIC.

Voir également

Science - Mathématique

Dernière mise à jour : Mardi, le 25 octobre 2016