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 Perl :
- #!/usr/bin/perl
-
- my($m)=100000000;
- my($ml)=10000;
- my($b)=31415821;
- my($a)=1;
-
- sub Mult() {
- my($p,$q) = @_;
- my($p1,$p0,$ql,$q0);
- $p1 = int($p / $ml);
- $p0 = $p % $ml;
- $ql = int($q / $ml);
- $q0 = $q % $ml;
- return ((($p0 * $ql + $p1 * $q0) % $ml) * $ml + $p0 * $q0) % $m;
- }
-
- sub Random() {
- $a = (&Mult($a,$b) + 1) % $m;
- return $a;
- }
-
- print "Génération de 10 nombres aléatoires statique:\n";
- my($I);
- for($I = 1;$I <= 10;$I++) {
- print &Random() . "\n";
- }
on obtiendra le résultat suivant :
Génération de 10 nombres aléatoires statique:31415822
40519863
62952524
25482205
90965306
70506227
6817368
12779129
29199910
45776111
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.