Entendendo a aleatoriedade simulada de JavaScript: um mergulho profundo em math.random ()
A geração aparentemente sem esforço de números aleatórios na programação geralmente mascara a complexidade subjacente, especialmente considerando a natureza inerentemente determinística dos computadores. Este artigo explora como o JavaScript simula a aleatoriedade usando Math.random ()
, revelando a mecânica por trás da geração do que percebemos como números aleatórios.
computadores, em sua essência, execute instruções sequencialmente. Então, como eles produzem números que parecem aleatórios?
A "Randomidade" fornecida por Math.random ()
não é verdadeiramente aleatória; É pseudo-aleatório. Os geradores de números pseudo-aleatórios (PRNGs) empregam algoritmos matemáticos para criar sequências de números exibindo comportamento aleatório.
características -chave dos prngs:
javascript's Math.random ()
normalmente utiliza algoritmos como XorShift ou Mersenne Twister (o algoritmo preciso depende do mecanismo JavaScript, como V8 no Chrome).
Math.random ()
Math.random ()
é o principal gerador de números aleatórios do JavaScript. Funciona da seguinte maneira:
produz um número de ponto flutuante entre 0 (inclusive) e 1 (exclusivo).
Exemplos incluem 0,2315601941492, 0,6874206142281 ou 0,9912760919023.
// Random number between 0 and 1
console.log(Math.random());
// Random integer between 0 and 9
console.log(Math.floor(Math.random() * 10));
// Random number between 1 and 100
console.log(Math.floor(Math.random() * 100) 1);
...
O algoritmo aplica transformações matemáticas à semente para criar um novo número.
Esta sequência previsível (dada a semente) o torna adequado para simulações e jogos, mas inadequado para aplicações criptográficas.
Math.random ()
// valores aleatórios criptograficamente seguros
const array = novo uint32Array (5);
window.crypto.getrandomValues (Array);
console.log (Array);
// Cryptographically secure random values
const array = new Uint32Array(5);
window.crypto.getRandomValues(array);
console.log(array);
fontes externas:
Os sistemas geralmente usam dados externos imprevisíveis (movimentos de mouse, pressionamentos de teclas, relógio do sistema) para valores de sementes. Vamos apreciar a interação intrigante entre determinismo e a aleatoriedade simulada que impulsiona nosso código!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3