Je souhaite créer une fonction de générateur de nombres aléatoires en utilisant JavaScript qui renverra un nombre aléatoire entre 0 et 1. Est-il possible de créer une fonction de générateur de nombres aléatoires personnalisée sans utiliser le code J'ai essayé cette approche. Cela fonctionne mais je ne sais pas si c'est vraiment aléatoire ou s'il existe un modèle? Cette fonction dépend de la variable Math.random () > fonction?
var lastRand = 0.5;
function rand(){
var x = new Date().getTime()*Math.PI*lastRand;
var randNum = x%1;
lastRand = randNum;
return randNum;
}
// Output
for(var n = 0; n < 50; n++){
console.log(rand());
}
lastRand
pour générer le nombre. Mais je veux un moyen plus efficace de le faire.
3 Réponses :
Pourquoi pas de cette façon? Cela me semble plus aléatoire car il ne dépend pas d'une valeur.
var lastRand, randNum; function rand(){ while(randNum == lastRand) randNum = (new Date().getTime()*Math.PI)%1; return lastRand = randNum; } // Output for(var n = 0; n < 50; n++) console.log(rand());
Il s'agit d'une version utilisant un générateur de fonctions qui ne nécessite pas de variables externes.
function *makeRand() { let seed = new Date().getTime() while (true) { seed = seed * 16807 % 2147483647 yield seed / 2147483647 } } // Usage let rand = makeRand() for (let i = 0; i < 5; i++) { console.log(rand.next().value) } // 0.05930273982663767 // 0.7011482662992311 // 0.1989116911771296 // 0.10879361401721538 // 0.4942707873388523
Source: https://www.cse.wustl.edu/~jain/iucee/ftp/k_26rng.pdf
p >
C'est une bonne solution. Mais j'ai remarqué un modèle dans cette méthode. Si je recharge la page toutes les 1 seconde, je trouve un modèle comme celui-ci. 0,22 ..., 0,24 ...., 0,26 ...., 0,28 ... parmi le premier nombre.
Peut-être appelez-vous makeRand () tout le temps? Assurez-vous de stocker le rand résultant et utilisez-le pour appeler next () plusieurs fois.
J'ai une meilleure solution. Il utilise un objet au lieu d'une variable externe.
var Random = { "lastRand" : 0.5, "randNum" : 0.5, "rand" : function(){ while(this.randNum == this.lastRand){ this.randNum = (new Date().getTime()*Math.PI*this.lastRand)%1; } return this.lastRand = this.randNum; } } for(var n = 0; n < 50; n++){ console.log(Random.rand()); }
Vous devriez vous pencher sur les techniques courantes de génération de nombres pseudo-aléatoires.
(retirant le masque chirurgical) Mais pourquoi?
Republiez! Allez trouver votre réponse ici: stackoverflow.com/questions/13442611/...
@olajensola Java! == JavaScript
J'ai trouvé ça wonderergiant.com/2013/03/random-without-math- aléatoire , cela pourrait vous aider
window.crypto.getRandomValues ()
Utilisez
Chance Js