2011-01-01 1 views
1

Если у меня есть очень короткая строка, скажу (JavaScript):Случайный символ из короткой строки - может ли случайность влиять?

var = "abcd"; 

, и я хочу, чтобы получить случайный характер от него, я мог бы использовать:

var random_char = str.charAt(Math.floor(Math.random() * str.length)); 

Теперь Math.floor(Math.random() * str.length) возвращает случайное число в диапазоне [0..3].

Может ли воспринимаемая случайность возвращаемого символа быть увеличена путем умножения строки, то есть путем эффективного увеличения диапазона случайных чисел?

var = "abcdabcdabcdabcdabcdabcd"; 

ответ

4

Это ничего не изменит. Math.random() возвращает псевдослучайное значение между [0..1). Предполагая, что генератор случайных чисел имеет хорошее качество, не имеет значения, сопоставляете ли вы его диапазон до abc или до abcabcabc.

Если Math.random()вернулся случайных чисел очень низкого качества (т.е. человек может определить логику за ними, просто посмотрев на числовой последовательности), ваша стратегия будет действительно увеличить восприятие «случайность». Но это не актуально, так как время автономной работы JavaScript обычно не написано обезьянами.

+0

Да, абсолютный смысл. Глупый вопрос сейчас, когда я думаю об этом. Написание быстрой проверки реальности в браузере заняло меньше времени, чем написание этого вопроса. oO – Tomalak

3

Я бы сказал, нет. Он по-прежнему составляет 25% вероятности получения a, b, c или d.

+0

Действительно? Как применяется принцип «голубины»? Здесь больше голубей, чем дырок. – dkarp

3

Нет, не может. Хуже того, вы получите ошибку 12,5% времени, так как Math.round будет округлять значения от 3,5 до 3,999999 до 4.

+2

Woah Я имел в виду 'math.floor()', конечно. Спасибо, что заметили! – Tomalak