Nano Hash - криптовалюты, майнинг, программирование

случайные числа в разных браузерах

Я хотел бы назначить каждому посетителю случайное число, чтобы включить такие вещи, как A / B-тестирование и т. Д. Я также хотел бы сгенерировать номер на клиенте, а не на сервере. И поскольку это должно быть быстро, я хотел бы использовать Math.random ()

Теперь у меня следующий вопрос: получу ли я случайное распределение чисел или разные реализации будут искажать числа?

Ура, Валентин


  • Я думаю, что больше, чем случайное, нужно уникальное. Я бы использовал комбинацию текущей даты и случайного числа, или, может быть, sha1 или что-то в этом роде. 05.07.2013
  • Если вы делаете это на стороне клиента без связи с сервером, у вас могут возникнуть коллизии. Чтобы уменьшить этот шанс, вам нужно использовать большие числа. 05.07.2013
  • @elclanrs Получение уникального номера было бы для меня +1. Более важно равномерное распределение. Допустим, 50% должны увидеть один вариант, а вторая половина - другой. 05.07.2013
  • См. Также stackoverflow.com/questions/2344312/ и stackoverflow.com/questions/1062902/ 05.07.2013

Ответы:


1

Вы можете использовать следующий javascript для проверки эффективного случайного распределения Math.random javascript:

var totalAbove  =0;
var totalBelow = 0
for(var i=0;i<10000;i++){
    var randomNumber = Math.ceil(Math.random()*1000)
    if(randomNumber > 500){
        totalAbove++
    }else{
        totalBelow++
    }
}

var belowSplit = (totalBelow / 10000) * 100
var aboveSplit = (totalAbove / 10000 ) * 100
alert("Above 500: " + totalAbove + "\n" + "Below 500: " + totalBelow + "\n split: " + belowSplit + "/" + aboveSplit);

или используйте этот jsfiddle: http://jsfiddle.net/VN3Bd/

Вы можете попробовать его в разных браузерах, чтобы убедиться, что он ведет себя по-разному, но я думаю, вы увидите, что распределение довольно равномерное.

Я думаю, вы можете положиться на Math.random в этой работе.

05.07.2013
  • Итак, идея такова: если все браузеры генерируют равномерное распределение, сумма всех генерируемых браузером чисел также равномерно распределяется? Это верное предположение? 05.07.2013
  • да. Я действительно использовал что-то подобное, и оно работает очень хорошо. Если вам удобно иметь распределение в пределах статистического диапазона, а не ТОЧНО 50/50 (или любого другого процента, который вы ищете) 05.07.2013

  • 2

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

    05.07.2013
  • Есть ли причина, по которой вы верите, что это правда? Я тоже хочу в это верить! 05.07.2013
  • Взглянув на исходный код Chromium-browser, вы можете увидеть реализации Math.random. Это также относится к случайному Safari. Тесты выполняются в файле с тегом Mozilla. Так что реализация не должна быть такой разной. Кстати норма должна быть такая: es5.github.io/x15 .8.html # x15.8.2.14, поэтому проблема действительно зависит от начального числа случайных чисел. Распределение улучшает вариативность и начальное число, поэтому случайное распределение должно быть таким же хорошим, как на одном сервере. 06.07.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..