Dans une certaine mesure, des générateurs de nombres aléatoires sont des chevaux pour les cours. Le Hasard de classe implémente une LCG raisonnablement paramètres choisis. Mais il présente encore les caractéristiques suivantes:
Si ces choses ne comptent pas pour vous, alors Aléatoire a la caractéristique qui le dédouane de l'être fournis dans le cadre de la JDK. Il est assez bon pour des choses comme des jeux casual (mais pas celles où l'argent est impliqué). Il n'y a pas de faiblesse graines de tant que tel.
Une autre alternative qui est la XORShift générateur, ce qui peut être mis en œuvre en Java comme suit:
public long randomLong() {
x ^= (x << 21);
x ^= (x >>> 35);
x ^= (x << 4);
return x;
}
Pour certains, très bon marché, les opérations, ce qui a une période de 2^64-1 (zéro n'est pas permis), et est assez simple pour être insérée lorsque vous générez des valeurs à plusieurs reprises. Divers changement de valeurs sont possibles: voir George Marsaglia du papier sur XORShift Générateurs pour plus de détails. Vous pouvez envisager de bits dans le nombre généré comme étant tout aussi aléatoire. Une principale faiblesse est que de temps en temps il va entrer dans une "ornière" où pas beaucoup de bits sont définis dans le nombre, et ensuite, il y a quelques générations pour sortir de cette ornière.
D'autres possibilités sont:
- combiner différents types de générateurs (par exemple nourriture la sortie d'un XORShift générateur dans une GRILLE, puis ajouter le résultat à la sortie d'un XORShift générateur avec des paramètres différents): ceci permet généralement les faiblesses des différentes méthodes pour être "lissée", et peut donner une plus longue période si les périodes de l'combiné générateurs sont choisis avec soin
- ajouter un "lag" (pour une plus longue période): essentiellement, où un générateur normalement transformer le dernier numéro généré, stocker un historique de "tampon" et de transformer, par exemple, le (n-1023)th.
Je dirais d'éviter les générateurs qui utilisent un stupide quantité de mémoire pour vous donner une période plus longue que vous avez vraiment besoin (certains ont une période plus grande que le nombre d'atomes dans l'univers, vous n'avez généralement pas besoin de ça). Et de noter que "longue période" ne veut pas forcément dire "haute qualité générateur" (bien que 2^48 est encore un peu faible!).