JavaScript aleatório matemático: como gerar números aleatórios em JS
Os números aleatórios são úteis para muitas finalidades, como gerar dados de teste, simular jogos, criar senhas e muito mais. Neste artigo, aprenderemos como usar o Math.random() método em JavaScript para gerar números aleatórios, bem como algumas de suas limitações e alternativas.
math random javascript
Introdução
O que é Math.random() e por que precisamos dele?
O Matemática objeto em JavaScript é um objeto embutido que possui propriedades e métodos para realizar cálculos matemáticos. Um de seus métodos é Math.random(), que retorna um número pseudoaleatório de ponto flutuante que é maior ou igual a 0 e menor que 1, com distribuição aproximadamente uniforme nesse intervalo.
Nós precisamos Math.random() porque nos permite gerar números aleatórios que podemos dimensionar ou manipular de acordo com o intervalo ou formato desejado. Por exemplo, podemos usar Math.random() para obter um número aleatório entre 0 e 100, ou um inteiro aleatório entre 1 e 10, ou um código de cor hexadecimal aleatório e assim por diante.
Como funciona Math.random() e o que ele retorna?
O Math.random() O método funciona usando um algoritmo que produz uma sequência de números que parecem aleatórios, mas na verdade são determinísticos e previsíveis. O algoritmo usa um valor inicial chamado semente, que geralmente é derivado da hora atual ou de alguma outra fonte de aleatoriedade. O algoritmo então aplica algumas operações matemáticas à semente para gerar o próximo número na sequência e assim por diante.
O Math.random() O método retorna um número entre 0 (inclusivo) e 1 (exclusivo), o que significa que 0 é um valor possível, mas 1 não é. O número tem até 16 dígitos decimais de precisão, dependendo da implementação. O número pode ser positivo ou negativo, dependendo do bit de sinal da representação binária.
Exemplos de uso de Math.random()
Obtendo um número aleatório entre 0 e 1
Para obter um número aleatório entre 0 e 1, podemos simplesmente chamar Math.random() sem nenhum parâmetro. Por exemplo:
// Obtém um número aleatório entre 0 e 1 let x = Math.random(); console.log(x); // por exemplo. 0,3749283749837498
Obtendo um número aleatório entre dois valores
Para obter um número aleatório entre dois valores, digamos min e máximo, podemos usar a seguinte fórmula:
// Obtém um número aleatório entre min e max let x = Math.random() * (max - min) + min; console.log(x); // por exemplo. 5.48394839483948
Esta fórmula funciona multiplicando o resultado de Math.random() pela diferença entre máximo e min, que nos dá um número entre 0 e essa diferença. Então nós adicionamos min a esse número, que o desloca para o intervalo desejado. Observe que esta fórmula retorna um número maior. ou igual a min e menos que máximo.
Obtendo um número inteiro aleatório entre dois valores
Para obter um inteiro aleatório entre dois valores, digamos min e máximo, podemos usar a seguinte fórmula:
// Obtém um inteiro aleatório entre min e max let x = Math.floor(Math.random() * (max - min)) + min; console.log(x); // por exemplo. 5
Esta fórmula funciona aplicando o Math.floor() ao resultado da fórmula anterior, que o arredonda para o número inteiro mais próximo. Observe que esta fórmula retorna um número inteiro maior ou igual a min e menos que máximo.
Obtendo um número inteiro aleatório entre dois valores, inclusive
Para obter um inteiro aleatório entre dois valores, digamos min e máximo, inclusive, podemos usar a seguinte fórmula:
// Obtém um inteiro aleatório entre min e max, inclusive let x = Math.floor(Math.random() * (max - min + 1)) + min; console.log(x); // por exemplo. 6
Esta fórmula funciona adicionando 1 à diferença entre máximo e min, o que garante que máximo também é um valor possível. Então aplicamos o Math.floor() método como antes. Observe que esta fórmula retorna um número inteiro maior ou igual a min e menor ou igual a máximo.
Limitações e alternativas de Math.random()
Math.random() não é criptograficamente seguro
Uma das limitações do Math.random() é que não é criptograficamente seguro, o que significa que não é adequado para gerar dados confidenciais, como senhas, chaves de criptografia, tokens, etc. Isso ocorre porque o algoritmo por trás Math.random() não é aleatório o suficiente e pode ser previsto ou manipulado por um invasor. Por exemplo, se um invasor conhece a semente ou as saídas anteriores de Math.random(), eles podem calcular as próximas saídas e adivinhar os dados gerados.
Math.random() não produz uma distribuição uniforme
Outra limitação de Math.random() é que não produz uma distribuição uniforme de números, o que significa que alguns números são mais prováveis de ocorrer do que outros. Isso ocorre porque o algoritmo por trás Math.random() usa operações bit a bit que introduzem algum viés na saída. Por exemplo, se usarmos Math.random() para gerar um número aleatório entre 0 e 255, veremos que alguns números aparecem com mais frequência que outros. Isso pode afetar a precisão e a imparcialidade de nossos aplicativos que dependem de números aleatórios.
Como usar crypto.getRandomValues() para números aleatórios seguros
Se precisarmos gerar números aleatórios seguros em JavaScript, podemos usar o window.crypto.getRandomValues() método, que faz parte da API de criptografia da Web. Esse método usa uma matriz ou uma matriz digitada como parâmetro e a preenche com valores aleatórios criptograficamente fortes. Por exemplo:
// Obtenha 16 bytes aleatórios seguros let bytes = new Uint8Array(16); window.crypto.getRandomValues(bytes); console.log(bytes); // por exemplo. [216, 47, 173, 11, 128, 92, 237, 214, 36, 44, 21, 162, 194, 175, 111, 97]
Como usar outras bibliotecas ou algoritmos para diferentes distribuições
Se precisarmos gerar números aleatórios com diferentes distribuições em JavaScript, como normal, exponencial, binomial etc., podemos usar outras bibliotecas ou algoritmos que implementem essas distribuições. Por exemplo, podemos usar as seguintes bibliotecas:
: Uma biblioteca que fornece vários métodos para gerar números aleatórios com diferentes distribuições e propriedades.
: Uma biblioteca que fornece vários métodos para gerar dados aleatórios, como nomes, datas, cores, etc., bem como números com diferentes distribuições.
: uma biblioteca que fornece vários métodos para gerar números aleatórios com diferentes distribuições usando a biblioteca D3.js.
Alternativamente, podemos implementar nossos próprios algoritmos para gerar números aleatórios com diferentes distribuições, como a transformada de Box-Muller, o método de transformação inversa, o método de rejeição, etc. No entanto, esses algoritmos podem exigir mais conhecimento matemático e habilidades de codificação e podem não ser tão eficientes ou precisos quanto as bibliotecas existentes.
Conclusão
Resumo dos principais pontos
Neste artigo, aprendemos como usar o Math.random() método em JavaScript para gerar números aleatórios, bem como algumas de suas limitações e alternativas. Temos visto que:
Math.random() retorna um número pseudoaleatório de ponto flutuante entre 0 e 1, com distribuição aproximadamente uniforme.
Podemos usar fórmulas para dimensionar ou manipular o resultado de Math.random() para obter números aleatórios entre dois valores ou inteiros aleatórios entre dois valores.
Math.random() não é criptograficamente seguro e não produz uma distribuição uniforme de números.
Podemos usar window.crypto.getRandomValues() para números aleatórios seguros e outras bibliotecas ou algoritmos para diferentes distribuições de números aleatórios.
perguntas frequentes
Como posso testar se Math.random() é realmente aleatório?
Não há uma maneira definitiva de testar se Math.random() é realmente aleatório, pois a aleatoriedade é um conceito subjetivo e relativo.No entanto, podemos usar alguns testes estatísticos para medir o quão perto a saída de Math.random() está de uma sequência verdadeiramente aleatória. Por exemplo, podemos usar o teste do qui-quadrado, o teste de Kolmogorov-Smirnov, o teste de execuções, etc., para verificar se a saída de Math.random() segue uma distribuição uniforme, não tem correlação e não tem padrões ou tendências.
Como posso semear Math.random ()?
Não podemos semear Math.random() em JavaScript, pois ele não aceita nenhum parâmetro ou expõe nenhuma propriedade que nos permita definir ou alterar a semente. A semente é determinada pela implementação e geralmente é baseada na hora atual ou em alguma outra fonte de aleatoriedade. Se precisarmos propagar nosso gerador de números aleatórios, podemos usar outras bibliotecas ou algoritmos que suportem propagação, como Random.js ou seedrandom.js.
Como posso gerar uma string aleatória em JavaScript?
Podemos gerar uma string aleatória em JavaScript usando Math.random() para obter um número aleatório e então convertê-lo em uma string com uma raiz (base) especificada. Por exemplo, podemos usar a seguinte função para obter uma string aleatória de comprimento n com caracteres de 0 a 9 e A a Z:
// Obtém uma string aleatória de comprimento n function getRandomString(n) let result = ""; for (let i = 0; i
Como posso gerar um booleano aleatório em JavaScript?
Podemos gerar um booleano aleatório em JavaScript usando Math.random() para obter um número aleatório e depois compará-lo com um valor limite. Por exemplo, podemos usar a seguinte função para obter um booleano aleatório com igual probabilidade:
// Obtém uma função booleana aleatória getRandomBoolean() // Retorna verdadeiro se Math.random() for maior ou igual a 0,5 return Math.random() >= 0,5; console.log(getRandomBoolean()); // por exemplo. verdadeiro
Como posso gerar uma matriz aleatória em JavaScript?
Podemos gerar uma matriz aleatória em JavaScript usando Math.random() para obter números aleatórios e, em seguida, colocá-los em uma matriz. Por exemplo, podemos usar a seguinte função para obter uma matriz de comprimento n com números aleatórios entre min e max:
// Obtém um array de comprimento n com números aleatórios entre min e max function getRandomArray(n, min, max) let result = []; for (let i = 0; i 0517a86e26
コメント