Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сгенерировать случайное целое в промежутке 0-N  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Как в процедуре сгенерировать случайное целое в указанном диапазоне?
10 дек 12, 17:14    [13608356]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Winnipuh
Как в процедуре сгенерировать случайное целое в указанном диапазоне?
Функция RAND
10 дек 12, 17:15    [13608363]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
alexeyvg
Winnipuh
Как в процедуре сгенерировать случайное целое в указанном диапазоне?
Функция RAND


да, в курсе, но мжет есть более изощрённые способы ;-)
10 дек 12, 17:23    [13608416]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
да, в курсе, но мжет есть более изощрённые способы

написать свой генератор
10 дек 12, 17:24    [13608419]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Crimean
Member

Откуда:
Сообщений: 13147
есть еще затратный способ - сделать табличку с цифрами и выбирать из нее top 1 order by newid()
но иногда вполне применим если нужно выбрать случайную запись
но - затратный, я предупредил :)
10 дек 12, 17:42    [13608545]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Winnipuh
да, в курсе, но мжет есть более изощрённые способы ;-)
Зависит от цели...
Если нужно в процедуре получить одно случайное целое число, то зачем другие способы?

А изощрённых способов, конечно, можно много придумать, мало-ли... Допустим, можно обратиться из расширенной процедуры на С++ к внешнему веб-сервису...
10 дек 12, 17:57    [13608718]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
А изощрённых способов, конечно, можно много придумать, мало-ли... Допустим, можно обратиться из расширенной процедуры на С++ к внешнему веб-сервису...

А вы не путаете изощрённый способ с... эээ... извращённым?
10 дек 12, 18:09    [13608799]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Гость333
alexeyvg
А изощрённых способов, конечно, можно много придумать, мало-ли... Допустим, можно обратиться из расширенной процедуры на С++ к внешнему веб-сервису...

А вы не путаете изощрённый способ с... эээ... извращённым?
ИМХО это синонимы :-)

Нужно использовать максимально простой способ решения задачи, остальное - извращения.
10 дек 12, 18:11    [13608817]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мне кажется, что автор просто не знает формулы равномерно распределенного случайного числа в заданном диапазоне
RAND()*(High-Low)+Low
10 дек 12, 18:12    [13608823]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Гость333
alexeyvg
А изощрённых способов, конечно, можно много придумать, мало-ли... Допустим, можно обратиться из расширенной процедуры на С++ к внешнему веб-сервису...

А вы не путаете изощрённый способ с... эээ... извращённым?
А действительно извращением мне показалось то, что действительно есть такой большой серьёзный проект - сервис случайных чисел :-)

http://www.random.org/
10 дек 12, 18:17    [13608849]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Мне кажется, что автор просто не знает формулы равномерно распределенного случайного числа в заданном диапазоне
RAND()*(High-Low)+Low


вам только так кажется...

А вы уверены, кстати, что в этом случае будет равномерное распределение?
ведь RAND() не гарантирует равномерное распределение

или я ошибаюсь?
10 дек 12, 18:21    [13608873]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Вася с марса
Guest
Glory
Мне кажется, что автор просто не знает формулы равномерно распределенного случайного числа в заданном диапазоне
RAND()*(High-Low)+Low


А где гарантия равномерности? Генерация будет проходить сильно не равномерно!!!!
11 дек 12, 05:33    [13610263]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
alexeyvg
А изощрённых способов, конечно, можно много придумать, мало-ли... Допустим, можно обратиться из расширенной процедуры на С++ к внешнему веб-сервису...

Хватит просто расширенной процедуры. Или CLR-сборки. С реализацией Mersenne twister, например - они уже есть готовые - на C++, на C#, и много еще на чем. Раз уж автора потянуло на такие приключения.
11 дек 12, 06:30    [13610282]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Вася с марса
Glory
Мне кажется, что автор просто не знает формулы равномерно распределенного случайного числа в заданном диапазоне
RAND()*(High-Low)+Low


А где гарантия равномерности? Генерация будет проходить сильно не равномерно!!!!
Ну, не так чтоб очень сильно...

Можно ещё использовать CryptoAPI: http://www.gotdotnet.ru/blogs/yliberman/6065/
11 дек 12, 08:32    [13610399]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с марса
Glory
Мне кажется, что автор просто не знает формулы равномерно распределенного случайного числа в заданном диапазоне
RAND()*(High-Low)+Low


А где гарантия равномерности? Генерация будет проходить сильно не равномерно!!!!

Вот результат 100000 запусков на промежутке 1-99
min_cnt     max_cnt     avg_cnt     stdev_cnt                                             var_cnt                                               
----------- ----------- ----------- ----------------------------------------------------- -----------------------------------------------------
917 1078 1010 32.270696554493355 1041.3978561121894

+
1	1013
2 978
3 1051
4 994
5 1019
6 954
7 1026
8 1012
9 978
10 1029
11 944
12 957
13 1047
14 976
15 1028
16 1026
17 975
18 1012
19 1048
20 995
21 975
22 1025
23 1035
24 1020
25 1018
26 996
27 1016
28 1027
29 1078
30 983
31 1046
32 1030
33 1061
34 1035
35 981
36 954
37 978
38 1003
39 1050
40 972
41 993
42 1007
43 1056
44 939
45 1015
46 1037
47 1037
48 1023
49 971
50 1018
51 980
52 1021
53 1053
54 1011
55 1023
56 1064
57 1013
58 1040
59 998
60 1012
61 1009
62 1005
63 996
64 1004
65 1044
66 1006
67 992
68 1050
69 1015
70 1000
71 925
72 1013
73 1056
74 1008
75 941
76 1048
77 1050
78 990
79 1020
80 1059
81 1002
82 982
83 997
84 1007
85 1050
86 1020
87 1045
88 999
89 990
90 1034
91 917
92 1031
93 1023
94 1010
95 985
96 954
97 1012
98 1027
99 1028
11 дек 12, 10:43    [13610942]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Glory
Member

Откуда:
Сообщений: 104751
А вот на 1 000 000 запусков для 1-100
min_cnt     max_cnt     avg_cnt     stdev_cnt                                             var_cnt                                               
----------- ----------- ----------- ----------------------------------------------------- -----------------------------------------------------
9742 10218 10000 106.12247546104359 11261.979797979799
+
1           9945
2 9958
3 9976
4 10101
5 10111
6 10115
7 10080
8 9742
9 10079
10 9787
11 10041
12 10039
13 10050
14 10098
15 10098
16 9961
17 9928
18 10200
19 10099
20 9933
21 10068
22 10108
23 9833
24 10003
25 10095
26 9990
27 10175
28 10100
29 9950
30 9963
31 9963
32 10017
33 9834
34 9959
35 10036
36 9888
37 9921
38 10069
39 9909
40 9956
41 10128
42 9991
43 9897
44 9920
45 9985
46 10215
47 9864
48 9755
49 10074
50 9866
51 10007
52 9848
53 10079
54 9782
55 9969
56 10200
57 10101
58 10055
59 10064
60 10218
61 10048
62 10010
63 10165
64 10083
65 9985
66 9927
67 10106
68 10048
69 10020
70 10107
71 9948
72 9952
73 9996
74 10153
75 10064
76 9826
77 10003
78 10059
79 9903
80 9902
81 10039
82 9896
83 9929
84 9901
85 9891
86 9879
87 9963
88 10074
89 10080
90 10057
91 9886
92 9987
93 9769
94 10042
95 10102
96 9914
97 10062
98 9911
99 10119
100 9998
11 дек 12, 11:23    [13611200]     Ответить | Цитировать Сообщить модератору
 Re: Сгенерировать случайное целое в промежутке 0-N  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
alexeyvg
Гость333
пропущено...

А вы не путаете изощрённый способ с... эээ... извращённым?
ИМХО это синонимы :-)

Нужно использовать максимально простой способ решения задачи, остальное - извращения.


точно... ;-)
11 дек 12, 13:31    [13612324]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить