Vrai ou mieux Numéros aléatoires avec Javascript
J'ai toutes sortes de ressources qui s'appuient sur javascript nombres aléatoires. Cependant, j'ai été voir beaucoup de problèmes où l'aléatoire n'est pas aléatoire, car de la façon dont je suis la génération de nombres aléatoires.
Est-il des ressources javascript pour moi pour générer vrai, ou tout simplement mieux nombres aléatoires?
Je sais que je peux l'interface avec Random.org mais quelles autres options s'offrent à moi?
Je suis en utilisant:
function rand( lowest, highest){
var adjustedHigh = (highest - lowest) + 1;
return Math.floor(Math.random()*adjustedHigh) + parseFloat(lowest);
}
source d'informationauteur rlb.usa
Vous devez vous connecter pour publier un commentaire.
En supposant que vous n'êtes pas juste de voir les modèles où il n'y a pas tout, essayez un Mersenee Twister (Article de wikipédia ici). Il existe différentes implémentations comme ce un sur github.
Similaire DONC, la question:
Seedable JavaScript générateur de nombre aléatoire
Si vous voulez quelque chose de plus aléatoires, alors envisager l'utilisation de la random.org API pour obtenir des nombres vraiment aléatoires, mais je voudrais suggérer en utilisant uniquement que de la semence, et pas pour chaque numéro, vous devez respecter leurs limites d'utilisation.
Peaufiner les numéros de sorte qu'ils "semblent aléatoires"
Je suis d'accord avec Phil H que les humains sont si bons à trouver des modèles qu'ils pensent souvent qu'ils le voir modèles de même dans "parfaitement aléatoire" des séquences de nombres (clustering illusionapophenia, sophisme du joueur, etc).
Parcelles de la vraie positions aléatoires ont généralement beaucoup de mottes et de points qui, "par hasard" à l'automne très proches, ce qui semble assez suspect.
Artistes prennent souvent complètement généré de façon aléatoire, de motifs et de "coup de pouce" pour les rendre apparaissent "random", même si ce prudent de pousser rend le modèle moins aléatoire (un)(b)(c)(d)etc.
Sinon, un faible divergence de séquence parfois semble "mieux" que d'une véritable séquence aléatoire et est beaucoup plus rapide à générer.
Rapide des générateurs de nombres aléatoires
Il y a beaucoup de "générateurs de nombres aléatoires" à travers tout le spectre de "extrêmement rapide" à "assez lent" et de "facile, même pour un homme de voir les profils" à "peu probable que sans l'homme ne pourrait jamais voir tous les modèles" à "cryptographique sécurisé et, après avoir ensemencé avec des quantités adéquates de l'entropie, aussi loin que nous pouvons dire, impossible à distinguer de hasard à tout attaquant à l'aide de moins que la totalité de l'énergie produite par l'humanité pendant un mois."
Non cryptographiques-force générateurs de nombres aléatoires qui donnent encore un excellent rendement (peu probable que sans l'homme ne pourrait jamais voir tous les modèles) comprennent l'Mersenne twistermultipliez-à-porterLa traîne de Fibonacci générateurBien équidistribuée longue période linéaireXorshiftetc.
De chiffrement aléatoire nombre de techniques qui fonctionnent avec certains navigateurs
J'ai entendu dire que Cryptocat et d'autres applications JavaScript utiliser le pratique
window.crypto.getRandomValues()
ouwindow.msCrypto.getRandomValues()
ouSubtleCrypto.generateKey()
fonctions qui sont conçus pour générer de chiffrement de nombres aléatoires. Malheureusement, cette fonction n'est pas disponible dans IE 11 et ci-dessous.Depuis les navigateurs web utilisation des nombres aléatoires de tous les temps (pour chaque "https://" à la page qu'ils fetch), il est très probable que ces fonctions (si disponible) peut s'exécuter plus rapidement que la plupart des générateurs de nombres aléatoires écrit en JavaScript -- même les non-algorithmes cryptographiques.
De chiffrement aléatoire nombre de techniques compatibles avec l'ancien et le moderne navigateurs
Une façon de générer de vrais nombres aléatoires en JavaScript est de capturer les événements de la souris et de les ajouter dans une piscine de l'entropie, en gardant la trace de certains (je l'espère conservateur), l'estimation de l'entropie ajouté. Une fois que la piscine est "plein" (les estimations indiquent qu'au moins 128 bits d'entropie ont été ajoutées), utilisez cryptographique sécurisé générateur de nombre aléatoire pour générer des nombres aléatoires à partir de la piscine-généralement à l'aide d'un hachage à sens unique, de sorte qu'une séquence de quelques milliers de sortie des numéros ne sont pas suffisant pour en déduire l'état de l'entropie et donc de prédire le prochain numéro de sortie.
Une mise en œuvre: http://lightsecond.com/passphrase.html
Lecture
vous pouvez générer un pool de nombres aléatoires simplement en demandant quelques données de manière asynchrone en raison de la performance.maintenant() vous donne le temps de précision jusqu'à quelques microsecondes. Utilisez ensuite le temps de réponse comme le sel dans un algorithme aléatoire,
Il y a beaucoup de facteurs qui influent sur cette période:
Il n'est pas bon pour générer des millions de numéros de cette façon, mais quelques-uns. Peut-être concaténer quelques résultats afin d'obtenir une bonne, longue de nombre aléatoire.
J'ai fait une bibliothèque JavaScript qui utilise le cosinus et le sinus de fonctions pour générer des nombres aléatoires à l'aide de la Date.maintenant() et new Date().getTime(). Pour chaque nombre aléatoire, je test pour voir si le numéro a été utilisé. Si elle a, je le répète le processus jusqu'à ce que je obtenir un nouveau numéro. Si je reçois un nouveau numéro, j'ai ajouter le numéro à la liste utilisée et puis retourner la valeur. Dans la même bibliothèque, j'ai également ajouté un hasard testeur qui passe en boucle par le biais d'un générateur de nombre aléatoire et cherche des modèles. C'est agréable de cette façon depuis qu'il se charge rapidement des nombres (j'ai chronométré avec la console.temps) sans avoir à contacter d'autres pages.
Vous pouvez trouver à la bibliothèque ici: punbb.atspace.cc/scripts/libraries/random.js