Имя: Пароль:
1C
 
Задача получить случайное значение из интервала чисел на V7
0 Kudr
 
05.05.06
10:51
Задача получить случайное значение из интервала чисел на V7.
Например есть 1,007 и 3,14 необходимо получить случайное число из заданного диапазона. Вообщем если у кого есть готовое решение буду благодарен.
1 Широкий
 
05.05.06
10:52
Фто? Приход "по-черному" делаем?
2 Zmich
 
05.05.06
10:53
3 Asmody
 
05.05.06
10:54
тока хотел сказать "кто быстрее даст ссылку на mszsuz'а" :)
4 NS
 
05.05.06
11:06
(3) На Сеньере нет ни одного нормального генератора ;-)))
5 Kudr
 
05.05.06
12:36
Спасибо за реакцию, от 1 до другого целого числа более менее понятно, а вот как например от 5 до17.
Неужели тупо прибавлять к минимальному значению.
А случайное дробное число, так же тупо генерить каждый разряд?
Может есть я чего не понимаю.
6 NS
 
05.05.06
12:44
(5) Путь есть функция Рандом() Выдающее случайное число 0<=Сл<1
Тогда чтоб получить случайное число в интервале [а,в) выполняется наисложнейшая формула
а+Рандом()*(в-а);
А Чтоб получить ЦЕЛОЕ случайное число в интервале а..в Еще более сложная
а+Цел(Рандом()*(a-в+1))
7 NS
 
05.05.06
12:45
Блин - есно запутался в этих сложнейших формулах...
А Чтоб получить ЦЕЛОЕ случайное число в интервале а..в  
а+Цел(Рандом()*(в-а+1))
8 ппрролдд
 
05.05.06
12:48
(6) частота получения целого числа в меньше, чем а,а+1,...,в-1
9 NS
 
05.05.06
12:48
(8) Абсолютно равна.
10 NS
 
05.05.06
12:50
Смотрим, допустим - а=2 в=5
2+цел(Рандом()*4)
2 - Рандом() [0.00,0.25)
3 - Рандом() [0.25,0.50)
4 - Рандом() [0.50,0.75)
5 - Рандом() [0.75,1.00)
11 ппрролдд
 
05.05.06
12:51
(9) в v7 арифметика ограниченной значности. Пишем программку с проверим на факте?. (у меня правде есть только v8)
12 Kudr
 
05.05.06
12:54
Спасибо ещё раз.
Видимо я действительно не всё знаю и понимаю
функция Рандом() которая выдает случайное число 0<=Сл<1 мне не известна
Можно ещё раз по буквам
_GetPerformanceCounter()%(а+1) для интервала от 0 до а в ЦЕЛЫХ числах работает , а вот для дробных значений затыка...
13 NS
 
05.05.06
12:56
(11) ?????? Ты о чем????
Что проверять? Сколько можно проверять? Чушь несешь!!!!
14 Kudr
 
05.05.06
12:56
Ну надо же пока набивал, да переваривал скока инфы для информации выдали...
15 NS
 
05.05.06
12:57
(12) ГетПерформанс даст очень плохую последовательность....
16 smaharbA
 
05.05.06
12:58
Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language="javascript";
Математика=Скрипт.Eval("Math");
Сообщить(Математика.random(0));
17 Kudr
 
05.05.06
12:59
(15) блин тогда сначала
Пожалуйста (если не сложно) ещё раз код лучшего варианта Рандом()
18 ппррролддд
 
05.05.06
13:00
(13) при ограниченном числе знаков, выдаваемом рандом() хвостик диапазона обрезается, и последннее целое число диапазона выпадает реже
19 NS
 
05.05.06
13:00
перем randseed;  
Процедура randomize(а=0)  
   // сбрасывает генератор
   Если а=0 тогда    
       randSeed=_getPerformanceCounter();  
   Иначе
       randseed=а;  
   КонецЕсли;    
КонецПроцедуры
// **************
Функция random()    
   // выдает случайное число 0 <= rand < 1
   randSeed=(randSeed*1103515245+12345)%2147483648;
   возврат randSeed/2147483648;
КонецФункции
20 smaharbA
 
05.05.06
13:00
(17) -> (16)
21 Kudr
 
05.05.06
13:05
Слушайте коллеги, огромное Вам спасибо что Вы есть, думаю мне пока информации достаточно. Пошол переваривать и применять...
Отдельное спасибо NS и smaharbA
22 NS
 
05.05.06
13:06
(18) Посчитать тебе вероятность на основании 19?
Для случая (10)
2 Randseed 0..536870911 - 536870912 значений
3 Randseed 536870912..1073741823 - 536870912 значений
4 Randseed 1073741824..1610612735 - 536870912 значений
5 Randseed 1610612736..2147483647 - 536870912 значений
Абсолютно одинаковая вероятность...
Для 5 значений - Будет разброс +-0.0000001%
23 ппрроолдд
 
05.05.06
13:08
(22) особенно убедительно будет при:

Функция random()    
   // выдает случайное число 0 <= rand < 1

   randSeed=(randSeed+1)%6;
   возврат randSeed;
КонецФункции
24 NS
 
05.05.06
13:09
(23) Не понял - ты прикидываешься, или всё действительно настолько плохо?
25 NS
 
05.05.06
13:10
(23) Кстати - "%" ну никак тебе не вернет случайное число в диапазоне указанном в комментарии. Даже поделить на 6 забыл...
26 ппррролдд
 
05.05.06
13:12
(24) а , что, генератор в (19) настолько хорош, что других не бывает? Все генераторы псевдослучайеных чисел типа (19) выдают циклическую последовательность.
27 прролдд
 
05.05.06
13:13
(25) извини, коньяку укушался. У меня метода - спать не ложусь, жду пока организм переработает алкоголь, тогда с утра как огурчик!!!
28 NS
 
05.05.06
13:21
29 Волшебник
 
модератор
05.05.06
13:22
ТелепатБот, скажи, как в 1С реализовать генератор случайных чисел
30 ТелепатБот
 
гуру
05.05.06
13:22
31 NS
 
05.05.06
13:31
(26) Да, цикличесвая последовательность из 2147483648 значений ;-))) Долго будешь дожидаться повторения цикла ;-)))
32 romix
 
модератор
05.05.06
15:03
Я делал при помощи ВК.
http://x-romix.narod.ru/Events.rar
52 ппрролдд
 
06.05.06
12:37
(31) врядли одно 2147483648 значений попадет в "критический" диапазон, откусываемый в (6) при округлении, что ты и доказал в (22).

по настоящему хороший генератор в (6) должен слегка туфтить :)
53 прпрооллдд
 
06.05.06
12:41
+(52) извените, дложно быть написано:
"врядли хотя бы одно, не говоря уж о статистически значимом количестве из 2147483648 значений..."
54 NS
 
06.05.06
13:33
(53) Ничего не понял. В какой диапазон? Что не попадет????
55 Лямур
 
06.05.06
13:34
(0)А Microsoft нам не поможет?
57 пппррролддд
 
10.05.06
11:10
(54) Идея подкола в (8) была такая:
при достаточно большом диапазоне - числе (в-а), например равном 1000...0000,
ошибка округления (вызванная ограниченным числом знаков арифметики) в выражении Рандом()*(в-а), может быть достаточно большой, настолько, что а+Цел(Рандом()*(в-а)) будет выдавать целое число (в) статистически значимое меньшее число раз, чем другие числа диапазона.

Но и генератор чисел рандом() должен быть достаточно хорош, чтобы  диапазон, отсекаемый при округлении (двадца... знак после запятой) для него играл какую то роль - чтобы в этот диапазон попадали числа из последовательности псевдослучайных чисел, генерируемых им. Поэтому 2147483648 значений - маловато для проверки :)