|
Функция Random в 1С | ☑ | ||
|---|---|---|---|---|
|
0
1c_Sensey
10.08.07
✎
10:09
|
Подскажите пожалуйста функцию генерации случайного числа/символа в 1С
|
|||
|
1
Эльниньо
10.08.07
✎
10:10
|
//_____________________________________________________________________________
function random(n) export randSeed = _getPerformanceCounter() * 1103515245 + 12345; return ((randSeed / 65536) % 32768) % n+1; endFunction |
|||
|
2
IUnknown
10.08.07
✎
10:10
|
||||
|
3
1c_Sensey
10.08.07
✎
10:11
|
Это что за язык?
|
|||
|
4
IamAlexy
10.08.07
✎
10:11
|
ты будешь удивлен: 1с :)
|
|||
|
5
Woron
10.08.07
✎
10:13
|
Аутор . Этот вопрос много раз задавали. А мне всегда было интересно Зачем рандом в 1С?
|
|||
|
6
Эльниньо
10.08.07
✎
10:14
|
(3) Извините:
//_____________________________________________________________________________ Функция РандомХренов(н) Эспорт РандСид = _getPerformanceCounter() * 1103515245 + 12345; Возврат ((РандСид / 65536) % 32768) % н+1; КонецФункции; |
|||
|
7
1c_Sensey
10.08.07
✎
10:14
|
(4) Действительно удивлен :) Щас попробую
|
|||
|
8
NS
10.08.07
✎
10:16
|
(1,6) Кто ж с Таймера случайное число считает???
_GetPerformanceCounter() Нормально использовать только для Randomize() - начальной установки RandSeed |
|||
|
9
IamAlexy
10.08.07
✎
10:18
|
(5) например по методу монтекарло считать число PI с заданой точностью :)
ну или например оклад рассчитывать... " а назначем мы сотрудникам седня зарплату пофиг как в диапазоне от 1000 до 2000 у.е" |
|||
|
10
IamAlexy
10.08.07
✎
10:19
|
(0)(1)(6) может лучше через ком обращатся к функциям VBS и использовать RND() ?
|
|||
|
11
NS
10.08.07
✎
10:21
|
Решение:
1. т.к. генератор от avb и NS давал маленький разброс случайных чисел, пришлось поюзать немного другой алгоритм: function Random() if emptyvalue(randSeed) = 1 then randSeed = _getperformancecounter(); endif; randSeed=(a*randSeed+c)%m; return randSeed; endfunction Здесь: a=1664525; c=1013904223; m=4294967296; последняя переменная - 2 в 32-й степени, две другие - рекомендуемые для таких целей коэффициенты Приводить к интервалу [0..A-1] лучше вот так - цел(Randseed * A / m) - это лучше чем (RandSeed / A) |
|||
|
12
NS
10.08.07
✎
10:22
|
(10) А Зачем?
|
|||
|
13
NS
10.08.07
✎
10:23
|
Ну все поняли - в более плохом вариенте есно не "/", а "%"
|
|||
|
14
IamAlexy
10.08.07
✎
10:23
|
(12) похоже на настоящий RANDOM
|
|||
|
15
Woron
10.08.07
✎
10:25
|
(9) В точно такомже вопросе утор писал что ему НУЖНО выбирать случайные элементы из справочника . Но к сожалению тот аутор кудато потерялся.
АУТОР если ты тут скажи ЗАЧЕМ??? |
|||
|
16
NS
10.08.07
✎
10:25
|
(14) Ты настоящий рандом видел? :lol:
Погугли Random() в Делфи, Вариант (11) лучше делфевого Рандома. |
|||
|
17
IamAlexy
10.08.07
✎
10:28
|
(16) к сожалению окинув взглядом 2 выдаваемые последовательности чисел, оценить наскольо одна из них более настоящий RANDOM чем другая не имею навыков и знаний.
|
|||
|
18
1c_Sensey
10.08.07
✎
10:30
|
Пароли генерирую случайные
|
|||
|
19
IUnknown
10.08.07
✎
10:31
|
(16)вот здесь не могу с вами согласиться...
|
|||
|
20
IUnknown
10.08.07
✎
10:32
|
тьфу (19) читать как "вот здесь не могу с вами не согласиться"
|
|||
|
21
NS
10.08.07
✎
10:32
|
(17) Ты посмотри ВИД Делвевого РАНДОМА.
Там Рандом - randSeed=(a*randSeed+c)%m; return randSeed; m так-же равно 4294967296; a a=1 для скорости. И чем Рандом в (11) отличается от Делфевого? Только тем что Делфевый чуть хуже для большей скорости. В интервал Делфи укладывает Ровно так-же как рекомедую я - ((RandSeed*A) shr 32 ) |
|||
|
22
NS
10.08.07
✎
10:33
|
(19) Гугли, и выкладывай Рандом из Делфи, или хочешь я его выложу?
|
|||
|
23
IUnknown
10.08.07
✎
10:34
|
(17)указанный в (11) алгоритм предложен комитетом ANSI-C
|
|||
|
24
IamAlexy
10.08.07
✎
10:35
|
function sin(value,sc=0)
sc=createObject("MSScriptControl.ScriptControl"); sc.language="VBscript"; return sc.eval("RND()"); endFunction |
|||
|
25
IamAlexy
10.08.07
✎
10:39
|
sin(value,sc=0) - переменные нафиг не нужны.. остались от функции возвращающей синус... :)
|
|||
|
26
NS
10.08.07
✎
10:42
|
Вот стандартный Сишный Рандом:
http://www.vbnet.ru/forum/show.aspx?id=78900&page=3 Делфевый куда-то ссылку запсил... Но короче он такой как я привел выше, только чему равно "с" не помню. Когда нужен более менее хороший - всегда стандартные генераторы переписывают - примеры Зобрист (Шахматные программы), Покер (игровые боты) |
|||
|
27
NS
10.08.07
✎
10:43
|
(24,25) Ты не ответил на вопрос - чем этот генератор лучше предложенного в (11)
|
|||
|
28
NS
10.08.07
✎
10:45
|
Извиняюсь - Сишный чуть дальше -
http://www.vbnet.ru/forum/show.aspx?id=78900&page=4 |
|||
|
29
IamAlexy
10.08.07
✎
10:50
|
(27) яж ответил.. мой мозг не в состоянии оценить 2 последовательности числе на предмет их рандомности и сказать что одна последовательность более рандомная чем другая.
просто мне способ через вбс кажется проще :) да и особого доверия к вычислениям типа ((а+б/с*д)=случайное_число) для получения "случайного" числа нет... обосновать не могу но доверия нет :) |
|||
|
30
IamAlexy
10.08.07
✎
10:50
|
(29) хотя я могу искренне заблуждаться :)
|
|||
|
31
NS
10.08.07
✎
10:55
|
(29,30) Не понимаю подхода. И в предложенном генераторе, и в делфевом коэффициенты предложены изначально Кнутом.
В Дефлфи были выбраны чуть худшие значения в угоду скорости. Если не умеешь оценивать - зачем тогда что-то утверждать? Оценка разных значений для конгруэнтных генераторов есть у Кнута. |
|||
|
32
NS
10.08.07
✎
10:56
|
(29) Ты читать умеешь? Такой генератор и в Си, и в Делфи.
|
|||
|
33
NS
10.08.07
✎
10:59
|
И кто тебе сказал что в VBскрипте не конгруэнтный генератор? Вообще-то они практически везде конгруэнтные, так как считаются одними из лучших, и при этом самые быстрые.
|
|||
|
34
NS
10.08.07
✎
11:05
|
Вот генератор Делфи:
RandSeed:=(RandSeed*08088405H+1) mod (2^32) Вот ассемблерный текст: function RandInt(Range:Integer):Integer;register; asm { ->EAX Range } { <-EAX Result } PUSH EBX XOR EBX, EBX IMUL EDX,[EBX].RandSeed,08088405H INC EDX MOV [EBX].RandSeed,EDX MUL EDX MOV EAX,EDX POP EBX end; function RandExt:Extended; const two2neg32:double=((1.0/$10000)/$10000);// 2^-32 asm PUSH EBX XOR EBX, EBX IMUL EDX,[EBX].RandSeed,08088405H INC EDX MOV [EBX].RandSeed,EDX FLD [EBX].two2neg32 PUSH 0 PUSH EDX FILD qword ptr [ESP] ADD ESP,8 FMULP ST(1), ST(0) POP EBX end; |
|||
|
35
IamAlexy
10.08.07
✎
11:27
|
(31)(32)(33)(34) в посте (10) обрати внимание на слово "может"
я не утверждаю что лучше я просто спрашиваю... просто как один из вариантов. |
|||
|
36
NS
10.08.07
✎
11:44
|
(35) Я читаю твой (14) пост.
И обясняю тебе - Рандом из (11) Это и есть настоящий рандом, и так-же как и все остальные стандартные генераторы в распространенных языках он использует линейный конгруэнтный метод и берет начальное значение с таймера. Точно так-же как и в Делфи, и в Си, и в Вбскрипте. Ты же не используешь арифмитические опреции через VBS? А то вдруг они в 1С ненастоящие, а там что ни на есть самые настоящие :) |
|||
|
37
Torquader
10.08.07
✎
20:27
|
Чего-то мне кажется, что использование random для паролей - не очень хороший метод - перебрать могут быстро.
|
|||
|
38
NS
11.08.07
✎
00:13
|
(37) Твой моск схавал Ктулкху?
|
|||
|
39
IamAlexy
11.08.07
✎
00:43
|
(37) видимо он хочет быстро подобрать рандомом пароль вида:
"3bRQW4npa5gMd7MBRAW0" хотя мысль здравая, нада в обработки по управлению списком пользователей базы добавить генерилку паролей... а то самому надоедает придумывать пароли вида 123 321 итд... |
|||
|
40
mamont
11.08.07
✎
00:45
|
Извиняюсь за шутку, но имхо, лучший рандом, это подбор чего угодно руками оператора... Удачных выходных! :)))))
|
|||
|
41
IamAlexy
11.08.07
✎
00:48
|
(40) тото большинство паролей состоят из комбинаций
123 321 987 789 :) а все он, оператор наподбирал.... |
|||
|
42
mamont
11.08.07
✎
00:50
|
(41) Это та самая непредсказуемая предсказуемость... Могут, когда не знают что делают, веть да? :))))
|
|||
|
43
Злобный Фей
11.08.07
✎
07:10
|
Алгоритмы... Пилять, озвучил юзеру требования к паролю и все дела. Нехай креативит. Нахрен рандомайзить? Напрер обязательное требование не менее 8 символов с использованием строчных, прописных и цифрей. Все равно ведь защита в 1с чисто условная, к сожалению.
|
|||
|
44
Злобный Фей
11.08.07
✎
07:15
|
Обычно проблема не в рандоме, не в пароле. Та и васче, хто нахрен будет подбирать пароли? Проблема обычно в отучении вешания стикера с паролем на монитор. Бо генери/не генери што хош, а коли стикер на монике висит, то на кой хрен все эти телодвижения - не понятно
|
|||
|
45
IamAlexy
11.08.07
✎
09:27
|
(43)(44) пароли пользователей делаются не для того чтобы злобный "}{AsKeр" не проник в базу а для того чтбы для документов с "высоким уровнем ответсвенности" можно было гарантировать невмешательство в документ третьих лиц.
тоесть тобы тетя машаа-бухгалтер не заявляла - "а я ничего не знаю про эту дебиторскую задолженность а то что в документах значится мой пользователь ничего не значит ибо у меня пароль 123 и все его знаю и вообще ничего я не знаю" имхо. + чем строже пароль тем ответственнее пользователь в целом к системе подходит ...(наблюдения личные) |
|||
|
46
Злобный Фей
11.08.07
✎
10:06
|
(45) Полностью согласен. Ты уточнил то, что как раз подразумевалось в указанных постах
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |