Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.12.2018, 21:44
|
|||
|---|---|---|---|
|
|||
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Привет всем! Посоветуйте способ получения "максимально случайных" чисел в заданном диапазоне посредством tsql Например нужно получить случайные целые числа в диапазоне 1-100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2018, 22:47
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Testor1, поискать по форуму, периодически возникающий вопрос (а уж гугл зашкаливает, в том числе схожими что ниже трафаретными решениями) простейший вариант :функция RAND() генерирует плоское распределение в диапазоне от 0 до 1 тебе нужно этот диапазон (ровно) растянуть от a до b т.е. 0 поднять до a (следовательно начиная с а), и всё до единицы растянуть до b (т.е. b*rand()) например основные сценарии для диапазона от а=5 до b=23: rand() выдал ноль (нижнее) или единицу (верхнее) значения при нуле: a+rand() = 5+0 = 5 (т.е. нижняя граница диапазона) а при единице: b*rand() = 23*1 = 23 формула объединяющая оба условия будет (для перехода между двумя системами координат: 0~1 и a~b будет фактически прямой с изменяемым углом наклона и координатой пересечения с осью) (b-а)*rnd + а проверка rand()=0: (23-5)*0 + 5 = 5 rand()=1: (23-5)*1 + 5 = 23 т.е. можно обойтись различными вариациями в данном случае параметризированной формы (@b-@a)*rand()+@a с подгонкой под желаемый тип данных для целых чисел нужно сохранить плоскость распределения по краям, добиться этого (обычно приемлемого результата) можно с помощью сдвига верхней границы на +1 (иначе верхняя граница будет практически невероятным событием на длинных диапазонах) т.е. в твоём случае если пренебречь вероятностью получения через rand() единицы (шанс получить приближается к нулю, но он есть, если заменишь rand() на 1 то выскочишь из заданного диапазона): Код: sql 1. 2. есть вариации с использованием вместо floor() функций round() или ceiling() дальше зависит от области и нюансов применения есть и другие встроенные SQL функции приводящие к схожим результатам (с ходу: CRYPT_GEN_RANDOM() , NEWID() ..) так-же есть специфика по работе только с целыми значениями, какой-то удобный диапазон (от 0 до 100 или до 1000), для каждой строки или один раз за выполнение запроса, требования к форме/линейности распределения, пожелания по производительности и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2018, 23:03
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
P.S. кстати у тебя диапазон почти кратный, после простого умножения 10^n к линейности по правилам lg() можно привести. можно ещё подшаманить с краями и сам rand() параметризовать, тогда добавив дополнительное условие на проверку = 1 можно в зависимости от приемлемой точности исключить (например через если = 1 то отнять -0.000000001 вылетание за границы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 00:06
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Testor1Привет всем! Посоветуйте способ получения "максимально случайных" чисел в заданном диапазоне посредством tsql Например нужно получить случайные целые числа в диапазоне 1-100. кстати, надо быть готовым к тому, что случайные числа могут повторяться. например: 1,9,13,6,6,5 и т.п. случайность не гарантирует неповторяемость подряд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 00:27
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
komrad, случайные числа и последовательность случайных чисел - понятия различающиеся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 00:42
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
vikkivkomrad, случайные числа и последовательность случайных чисел - понятия различающиеся не спорю с данным утверждением это скорей автору на заметку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 05:27
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
vikkivkomrad, случайные числа и последовательность случайных чисел - понятия различающиеся С этого места подробнее! Я записываю!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 13:56
|
|||
|---|---|---|---|
|
|||
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
имо последовательности бывают только псевдослучайных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2018, 13:58
|
|||
|---|---|---|---|
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Владислав Колосовимо последовательности бывают только псевдослучайных. Ты не прав, брут. Кидай монетку и записывай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2018, 01:09
|
|||
|---|---|---|---|
|
|||
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
vikkiv, Статей реально много, а вот найти качественный генератор случайных чисел для диапазона очень сложно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2018, 01:12
|
|||
|---|---|---|---|
|
|||
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Пока вот что-то такое использую, но думал, что есть что-то получше SET @rn = FLOOR(RAND(CAST(CRYPT_GEN_RANDOM(4) AS INT))*(@numbers)+1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.12.2018, 01:56
|
|||
|---|---|---|---|
|
|||
Получить "случайные" числа из заданого диапазона |
|||
|
#18+
Testor1Пока вот что-то такое использую, но думал, что есть что-то получше SET @rn = FLOOR(RAND(CAST(CRYPT_GEN_RANDOM(4) AS INT))*(@numbers)+1);И какой же у вас критерий лучшести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1688550]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 395ms |

| 0 / 0 |
