Насколько случайный Math.random JavaScript?

Весь исходный код и комментарии должны быть написаны на английском языке

Написание исходного кода и / или комментариев на языках, отличных от английского, делает его менее пригодным для повторного использования и более сложным для отладки, если вы не не понимаю язык, на котором они написаны.

То же самое касается таблиц, представлений и столбцов SQL, особенно при использовании сокращений. Если они не сокращены, возможно, я смогу перевести название таблицы / столбца в режиме онлайн, но если они сокращены, все, что я могу сделать, это выбрать SELECT и попытаться расшифровать результаты.

111
задан Community 23 May 2017 в 11:47
поделиться

6 ответов

Given numbers between 1 and 100.

  • 9 have 1 digit (1-9)
  • 90 have 2 digits (10-99)
  • 1 has 3 digits (100)

Given numbers between 1 and 1000.

  • 9 have 1 digit
  • 90 have 2 digits
  • 900 have 3 digits
  • 1 has 4 digits

and so on.

So if you select some at random, then that vast majority of selected numbers will have the same number of digits, because the vast majority of possible values have the same number of digits.

177
ответ дан 24 November 2019 в 02:56
поделиться

Существуют разные типы случайности. Math.random дает вам равномерное распределение чисел.

Если вам нужны разные порядки величин, я бы предложил использовать экспоненциальную функцию для создания так называемого степенного распределения :

function random_powerlaw(mini, maxi) {
    return Math.ceil(Math.exp(Math.random()*(Math.log(maxi)-Math.log(mini)))*mini)
}

Эта функция должна дать вам примерно такое же количество однозначных чисел, как двузначные числа и как трехзначные числа.

Существуют также другие распределения для случайных чисел, такие как нормальное распределение (также называемое распределением Гаусса).

44
ответ дан 24 November 2019 в 02:56
поделиться

Your results are actually expected. If the random numbers are uniformly distributed in a range 1 to 10^n, then you would expect about 9/10 of the numbers to have n digits, and a further 9/100 to have n-1 digits.

55
ответ дан 24 November 2019 в 02:56
поделиться

If you use a number like 10000000000000000000 you're going beyond the accuracy of the datatype Javascript is using. Note that all the numbers generated end in "00".

5
ответ дан 24 November 2019 в 02:56
поделиться

Well, if you are generating numbers up to, say, 1e6, you will hopefully get all numbers with approximately equal probability. That also means that you only have a one in ten chance of getting a number with one digit less. A one in a hundred chance of getting two digits less, etc. I doubt you will see much difference when using another RNG, because you have a uniform distribution across the numbers, not their logarithm.

3
ответ дан 24 November 2019 в 02:56
поделиться

Мне это кажется совершенно случайным! (Hint: It's browser dependent.)

Personally, I think my implementation would be better, although I stole it off from XKCD, who should ALWAYS be acknowledged:

function random() {
  return 4; // Chosen by a fair dice throw. Guaranteed to be random.
}
18
ответ дан 24 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: