Einfache Frage, aber ich interessiere mich für die Nuancen hier.
Ich generiere zufällige Boolesche Werte mit der folgenden Methode, die ich mir ausgedacht habe:
const rand = Boolean(Math.round(Math.random()));
Wann immer es random()
auftaucht, scheint es immer eine Falle zu geben - es ist nicht wirklich zufällig, es wird durch irgendetwas kompromittiert usw. Also würde ich gerne wissen:
a) Ist das oben Genannte die beste Vorgehensweise?
b) Überdenke ich Dinge?
c) Denke ich Dinge?
d) Gibt es einen besseren / schnelleren / eleganteren Weg, den ich nicht kenne?
(Auch etwas interessiert, wenn sich B und C gegenseitig ausschließen.)
Aktualisieren
Wenn es einen Unterschied macht, verwende ich dies für die Bewegung eines KI-Charakters.
const rand = Math.random() < 0.5
ist gleichwertig und einfacher.math.random
sollte es genug sein. Verwenden Sie einfach Millisekunden für Ihren Samen.Boolean(+Date.now()%2)
Antworten:
Technisch gesehen sieht der Code gut aus, ist aber etwas zu komplex. Sie können vergleichen ,
Math.random()
um0.5
direkt als Bereich vonMath.random()
IS[0, 1)
(dies bedeutet ‚im Bereich von 0 bis 1 einschließlich 0, aber nicht 1‘). Sie können den Bereich in[0, 0.5)
und unterteilen[0.5, 1)
.quelle
let
dhlet randomBool = Math.random() >= 0.5;
Wenn Ihr Projekt hat
lodash
, können Sie:quelle
Für einen kryptografisch sichereren Wert können Sie ihn
crypto.getRandomValues
in modernen Browsern verwenden.Stichprobe:
Beachten Sie, dass das
crypto
Objekt eine DOM-API ist, daher in Node nicht verfügbar ist, es jedoch eine ähnliche API für Node gibt .quelle
Math.random()
ist in vielerlei Hinsicht notorisch zufällig, großartiger alternativer Vorschlaga[0] > 127
quelle
Von Kelvins Antwort sehr beeindruckt, möchte ich eine ziemlich ähnliche, aber leicht verbesserte Lösung vorschlagen.
Diese Lösung ist etwas offensichtlicher zu lesen, da die Zahl auf der rechten Seite
<
die Wahrscheinlichkeit des Erhaltenstrue
und nicht des Erhaltens angibtfalse
, was natürlicher zu verstehen ist. Auch<
ist ein Symbol kürzer als>=
;quelle
Wie wäre es mit diesem?
quelle
Antwort von Alexander O'Mara
Fügen Sie einfach das Knotencode-Snippet hinzu
quelle