tôi muốn tạo một boolean ngẫu nhiên trong JavaScript, nhưng tôi muốn lấy giá trị trước đó vào tài khoản. Nếu giá trị trước đó là đúng, tôi muốn nó có nhiều khả năng cho giá trị tiếp theo là đúng. Tại thời điểm này tôi đã có này (đây là trong bối cảnh của một đóng cửa - goUp
và lastGoUp
là người dân địa phương với phạm vi chứa):cách thanh lịch để thiên vị boolean ngẫu nhiên
function setGoUp() {
goUp = getRandomBoolean();
if(lastGoUp) {
goUp = getRandomBoolean() || goUp;
}
else {
goUp = getRandomBoolean() && goUp;
}
lastGoUp = goUp;
}
Vì vậy, thuật toán đi:
- Nhận một ngẫu nhiên boolean
Nếu boolean ngẫu nhiên từ các cuộc gọi trước đây là Đúng:
a) nhận được một boolean ngẫu nhiên, và
or
hai cùngb) khác nhận được một boolean ngẫu nhiên và
and
này lại với nhau.
Tôi chắc chắn thuật toán này có thể được đơn giản hóa. Tôi băn khoăn về việc làm:
if(lastGoUp && goUp) {
goUp = goUp * (getRandomBoolean() || goUp);
}
nhưng điều đó có vẻ thực sự dơ bẩn.
Ngoài ra còn có một vấn đề với thuật toán này có nghĩa là tôi chỉ có thể tăng gấp đôi khả năng mắc boolean cùng một lần nữa - tôi không thể tinh chỉnh nó một cách dễ dàng. Bất kỳ ý tưởng?
Tất nhiên! Tôi đã không bắt đầu với bất kỳ loại thiên vị, vì vậy tôi đã cố gắng để làm việc ra làm thế nào để thiên vị một boolean trước tồn tại. Cảm ơn :) – Skilldrick
Btw, tôi quyết định đi với '< 0.8' and '> 0.8' vì điều đó có ý nghĩa hơn đối với tôi. Nó cũng rõ ràng hơn để biến 0.8 thành hằng số có tên. – Skilldrick
'GetRandomFloatBetween0And1' (nghĩa là, trong khoảng' [0, 1) ') chỉ là những gì' Math.random() 'thực hiện. –