Pergunta simples, mas estou interessado nas nuances aqui.
Estou gerando booleanos aleatórios usando o método a seguir:
const rand = Boolean(Math.round(Math.random()));
Sempre que random()
aparece, parece que sempre há uma armadilha - não é verdadeiramente aleatória, é comprometida por uma coisa ou outra, etc. Então, eu gostaria de saber:
a) A maneira acima é a melhor prática para fazer isso?
b) Estou pensando demais nas coisas?
c) Estou subestimando as coisas?
d) Existe uma maneira melhor / mais rápida / elegante de que eu não conheço?
(Também um pouco interessado se B e C são mutuamente exclusivos.)
Atualizar
Se faz alguma diferença, estou usando isso para o movimento de um personagem de IA.
javascript
random
boolean
Ben
fonte
fonte
const rand = Math.random() < 0.5
é equivalente e mais simples.math.random
deve ser suficiente. Basta usar milissegundos para sua semente.Boolean(+Date.now()%2)
Respostas:
Tecnicamente, o código parece bom, mas um pouco complexo demais. Você pode comparar
Math.random()
a0.5
diretamente, como a gama deMath.random()
é[0, 1)
(o que significa 'no intervalo de 0 a 1, incluindo 0, mas não 1'). Você pode dividir o intervalo em[0, 0.5)
e[0.5, 1)
.fonte
let
ielet randomBool = Math.random() >= 0.5;
Se o seu projeto tiver
lodash
, você poderá:fonte
Para um valor mais criptograficamente seguro, você pode usar
crypto.getRandomValues
em navegadores modernos.Amostra:
Observe que o
crypto
objeto é uma API DOM, portanto não está disponível no Node, mas existe uma API semelhante para o Node .fonte
Math.random()
é notoriamente não-aleatória, em muitos aspectos, ótima sugestão alternativaa[0] > 127
fonte
Impressionado muito com a resposta de Kelvin, gostaria de sugerir uma solução bastante semelhante, mas um pouco aprimorada.
Essa solução é um pouco mais óbvia de ler, porque o número à direita
<
indica a probabilidade de obtertrue
e não de obterfalse
, o que é mais natural de compreender. Também<
é um símbolo menor que>=
;fonte
Que tal este?
fonte
Resposta de Alexander O'Mara
apenas adicionando snippet de código do nó
fonte