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 AWK:
#! /bin/sh
BEGIN {
m=100000000;
ml=10000;
b=31415821;
a=1;
print "Génération de 10 nombres aléatoires statique:\n";
for(I=1;I<=10;I++) {
print Random() "\n";
}
exit;
}
function Mult(p,q) {
pl=int(p / ml);
p0=p % ml;
ql=int(q / ml);
q0=q % ml;
return (((p0*ql+pl*q0) % ml)*ml+p0*q0) % m;
}
function Random() {
a=(Mult(a,b)+1) % m;
return a;
}
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.