J'ai créé un générateur congruentiel linéaire (LCG), mais il semble me donner un résultat erroné.
// Instance variables
private long currentRandomNumber;
private long a;
private long c;
private long m;
public static void main(String[] args) {
// perform calculations and tests here
final long seed = 99L;
// Java's java.util.Random class values (according to Wikipedia):
long a = 25214903917L;
long c = 11L;
long m = 2^48L;
LCG lcg = new LCG(a, c, m, seed);
System.out.println("Sequence of LCG class: " + lcg.nextRandom() + ", " + lcg.nextRandom() + ", " + lcg.nextRandom() + ", " + lcg.nextRandom() + ", " + lcg.nextRandom());
}
public LCG(long seed, long a, long c, long m) {
currentRandomNumber = seed;
this.a = a;
this.c = c;
this.m = m;
}
// Implementation of the recurrence relation of the generator
public long nextRandom() {
currentRandomNumber = (a * currentRandomNumber + c) % m;
return currentRandomNumber;
}
Le résultat que j'obtiens est le suivant :
Sequence of LCG class: 28, 61, 28, 61, 28
J'ai utilisé les valeurs a, c et m parce que j'ai lu que la classe java.util.Random utilise également ces valeurs. Mais l'utilisation de cette classe avec la même graine donne des réponses différentes. J'ai également vérifié avec d'autres calculateurs lcg et mes réponses ne correspondent pas non plus. Je n'ai aucune idée de ce qui s'est passé.