JS는 임의의 부울을 생성합니다.
간단한 질문이지만 여기서 뉘앙스에 관심이 있습니다.
다음 방법을 사용하여 임의의 부울을 생성하고 있습니다.
const rand = Boolean(Math.round(Math.random()));
나타날 때마다 random()
항상 함정이있는 것 같습니다. 진정으로 무작위가 아니고, 무언가 또는 다른 것에 의해 타협 된 것입니다. 그래서 저는 알고 싶습니다.
a) 위의 방법이 최선의 방법입니까?
b) 내가 지나치게 생각하고 있는가?
c) 내가 뭔가를 과소 평가하고 있는가?
d) 내가 모르는 더 나은 / 빠른 / 우아한 방법이 있습니까?
(B와 C가 상호 배타적 인 경우에도 다소 관심이 있습니다.)
최신 정보
차이가 있다면 AI 캐릭터의 움직임에 이것을 사용하고 있습니다.
기술적으로 코드는 괜찮아 보이지만 너무 복잡합니다. Math.random ()의 범위는 [0, 1)이므로 "Math.random ()"을 "0.5"와 직접 비교할 수 있습니다. 범위를 [0, 0.5)와 [0.5, 1)로 나눌 수 있습니다.
var random_boolean = Math.random() >= 0.5;
프로젝트에있는 경우 lodash
다음을 수행 할 수 있습니다.
_.sample([true, false])
보다 암호화 된 보안 가치를 위해 crypto.getRandomValues
최신 브라우저에서 사용할 수 있습니다 .
견본:
var randomBool = (function() {
var a = new Uint8Array(1);
return function() {
crypto.getRandomValues(a);
return a[0] > 127;
};
})();
var trues = 0;
var falses = 0;
for (var i = 0; i < 255; i++) {
if (randomBool()) {
trues++;
}
else {
falses++;
}
}
document.body.innerText = 'true: ' + trues + ', false: ' + falses;
참고 것을 crypto
이 노드에서 사용할 수 없습니다, 그러나, 그래서 객체는 DOM API입니다 노드에 대한 유사한 API가있다 .
«! Math.round (Math.random ())»
이건 어때?
return Math.round((Math.random() * 1) + 0) === 0;
노드 코드 스 니펫 추가
const crypto = require('crypto');
const randomBool = (function () {
let a = new Uint8Array(1);
return function () {
crypto.randomFillSync(a);
return a[0] > 127;
};
})();
let trues = 0;
let falses = 0;
for (let i = 0; i < 100; i++) {
if (randomBool()) {
trues++;
}
else {
falses++;
}
}
console.log('true: ' + trues + ', false: ' + falses);
다른 방법 :
Boolean(Math.round(Math.random()))
참고 URL : https://stackoverflow.com/questions/36756331/js-generate-random-boolean
'programing tip' 카테고리의 다른 글
문자열 소스의 Python XML ElementTree? (0) | 2020.08.20 |
---|---|
iOS 8에서 방향 변경을 처리하는 "올바른"방법은 무엇입니까? (0) | 2020.08.20 |
사용자 정의 어댑터를 만들 때 getView () 메서드는 어떻게 작동합니까? (0) | 2020.08.19 |
변수가 배열인지 감지하는 방법 (0) | 2020.08.19 |
중첩 된 JSON 객체-모든 것에 배열을 사용해야합니까? (0) | 2020.08.19 |