Как к модульному тесту генератор псевдослучайных чисел?

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

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

SELECT 
    RefDate, 
    Symbol, 
    MAX(CASE WHEN SaleCondition LIKE '%O%' AND Pid='Q' THEN Price END) as OpeningPrice,
    MAX(CASE WHEN SaleCondition LIKE '%6%' AND Pid='Q' THEN Price END) as ClosingPrice
FROM trds
GROUP BY 
    RefDate, 
    Symbol
31
задан Paweł Hajdan 9 October 2008 в 11:00
поделиться

11 ответов

Получите другую реализацию того же алгоритма PRNG, генерируйте небольшое количество длинноватых тестовых сценариев на основе известных семян и проверьте, что Ваша реализация алгоритма соответствует всем реализации else. Чем больше данных Вы тестируете, тем более случайный они делают. Если Вы хотите быть серьезными, изучить, как проверка FIPS сделана для алгоритма.

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

при изобретении собственного алгоритма PRNG затем, у Вас есть довольно другая проблема, потому что вполне кроме тестирования Вашего кода также необходимо протестировать новый алгоритм. Существуют различные вещи сделать - я думаю, что самым важным является статистическое тестирование на выводе и экспертная оценка других шифровальщиков. В основном, тем не менее, если Вы были для разработки алгоритма PRNG, не имея достаточного знания в поле, чтобы знать, как протестировать его, затем это будет мусор.

30
ответ дан 27 November 2019 в 22:08
поделиться

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

я получил прекрасную идею взять два случайных числа и изобразить их в виде графика (x, y). Удивительно, как человеческий мозг может обнаружить неслучайные шаблоны. ("Случайный Шаблон" является оксюмороном.)

я настроил PRNG для удаления бороздчатости и starbursts, который появился на графике, затем построенном (журнал (x), журнал (y)) для совершенно новой перспективы, и повторил процесс.

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

0
ответ дан 27 November 2019 в 22:08
поделиться

Для тестирования PRNG я использовал бы ENT, который является комплектом статистических тестов, которые скажут Вам, как хорошо Ваш PRNG работает. Я предполагаю, что это - подход 1.

13
ответ дан 27 November 2019 в 22:08
поделиться

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

(1) числа правильно распределяются и (2), определенный алгоритм работает как ожидалось.

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

5
ответ дан 27 November 2019 в 22:08
поделиться

"Случайность" в генераторе псевдослучайного числа обычно выражается как среднее количество повторений, прежде чем число повторится. Существуют многочисленные алгоритмы, которые имеют переменную "случайность" и производительность. Random.org имеет хорошее объяснение некоторого анализа, сделанного на их алгоритмах. Проверьте изображения примерно на полпути ниже на страницу. Легко видеть в статических изображениях, насколько случайный эти два алгоритма.

Одна функция PRNG (истинная функция, не ошибка, замаскированная как функция), - то, что это предсказуемо. Для данного семени должна быть произведена та же последовательность чисел. Это чрезвычайно важно и необходимо для тестирования и отладки программ, которые используют стохастический (иначе, случайный) методы.

последовательность числа должна приблизить определенное статистическое распределение. Протестируйте свой PRNG путем генерации большой последовательности (скажите 10^6 числа), и выполните несколько статистических тестов на последовательности, особенно тест В квадрате хи (если распределение нормально). Сделайте гистограмму из своего образца и посмотрите, похоже ли, что Вы ожидаете.

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

3
ответ дан 27 November 2019 в 22:08
поделиться

Я полагаю, что Ваша первая точка (#1) добирается больше при тестировании качества сгенерированных случайных чисел, который диктует используемый алгоритм. Вторая точка (#2) добирается больше при тестировании реализация из алгоритма. При разработке алгоритма оба теста важны. При реализации алгоритма продемонстрированной производительности № 2 должен быть достаточным. Хотя, я, вероятно, протестировал бы больше, чем несколько семян и последовательности, которые закончились с помощью некоторого знания структуры конкретного генератора.

3
ответ дан 27 November 2019 в 22:08
поделиться

Вот статья CodeProject, которая включает реализацию теста Kolmogorov-Smirnov, упомянутого в объеме Donald Knuth 2, Получисловые Алгоритмы. Как упомянутый выше InSciTek Jeff, существует две проблемы: тестирование алгоритма и тестирование Вашей реализации алгоритма. Тест K-S, вероятно, найдет ошибки в реализации, и это - хорошее начало к тестированию качества самого алгоритма.

3
ответ дан 27 November 2019 в 22:08
поделиться

Plesae знать: Если Вы 'изобрели' свой PRNG, Вы будете, вероятно, иметь его неправильно и произвели что-то, что имеет меньше, чем оптимальное распределение. Базовый тест для того, насколько случайный Ваш генератор, является тестом Хи-квадрата

2
ответ дан 27 November 2019 в 22:08
поделиться

Можно найти некоторые ответы на этот вопрос полезный.

В основном, Вы не можете "доказать", что RNG случаен, но можно выполнить различные тесты для улучшения уверенности, что это. Эти тесты варьируются по сложности. Консерватор является всесторонним, но это действительно не предлагает ответ "да"/"нет", больше как несколько сотен "maybes". В другом конце спектра довольно просто генерировать последовательность значений (10,000, по крайней мере) и затем проверить, являются ли средние и стандартные deviaton/variance , как ожидается .

2
ответ дан 27 November 2019 в 22:08
поделиться

Строго, нет никакого способа протестировать, если случайный генератор действительно случаен :-) Первый подход дает Вам знание банки это keed надлежащее распределение или не для установленной суммы образцов только, неважно, насколько большой эта сумма. Второй подход может поддерживать knowlege, делает он ведет себя как алгоритм, но снова для фиксированного объема образцов.

лучшее можно сделать - используют обоих.

0
ответ дан 27 November 2019 в 22:08
поделиться

Если Вы не реализуете данный алгоритм PNRG нет никакого способа сказать, что числа случайны, это - природа случайности. да в среднем как Вы генератор чисел идет к бесконечности, которую он выровняет, но Вы не собираетесь тестировать бесконечное число повторений.

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

Вы не можете даже доказать mathmatically, что последовательность чисел случайна...

Дилберт XKCD

alt text

alt text

кивается вниз...

0
ответ дан 27 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

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