Имя: Пароль:
1C
 
Алгоритм генерации случайных чисел
0 DjSpike
 
03.12.05
15:18
Кто нибудь подскажите алгоритм генерации случайных чисел на языке 1с
1 Нач_8_0___
 
03.12.05
15:21
Нужна ли генерация по какой либо закономерности? Если нет бери время и колбась его. :-)
2 DjSpike
 
03.12.05
15:25
А пример можешь привести. Нужно случайно выбирать число и диапазона от 1 до N. При  это нельзя чтобы числа повторяличь.
3 skunk
 
03.12.05
15:25
по пиарим богов наших...

//*******************************************
// Глобальная переменная.
//
var GlSeed;

//*******************************************
// Random(MaxValue)
//
// Параметры:
//  MaxValue - Число. Максимальное число.
//
// Возвращаемое значение:
//  Целое число из диапазона от 1 до MaxValue.
//
// Описание:
//  Возвращает целое число из диапазона от
//  единицы до значения в MaxValue.
//
function Random(MaxValue)
   // Проверим первый ли раз вызываем.
   // Если да, то проинициализируем GlSeed.
   if emptyvalue(GlSeed) = 1 then
       GlSeed = _getperformancecounter();
   endif;
   // Ну а дальше сообственно алгоритм.
   // Предложен комитетом ANSI-C.
   // Реализация на языке 1С avb
   GlSeed = GlSeed * 1103515245 + 12345;
   return ((GlSeed / 65536) % 32768) % MaxValue + 1;
endfunction
4 lisss
 
03.12.05
15:27
5 DjSpike
 
03.12.05
15:28
_getperformancecounter()  - что этот оператор. я его не встречал в ЖКК.
6 skunk
 
03.12.05
15:29
его там и нет... но он работает
7 Wasya
 
03.12.05
15:30
Может кто подскажет, а как решить такую задачу:
Есть документы за какой то период. Как из них выбрать случайным образом заданное количество документов.
8 Нач_8_0___
 
03.12.05
15:33
В первом приближении можно так. Закидываешь ссылки на документы в ТЗ. Потом генеришь не повторяющиеся значения от 1 до N. Это будут номера строк в ТЗ.
9 Нач_8_0___
 
03.12.05
15:34
Где N - количеств документов. А генерировать надо M чисел.
10 skunk
 
03.12.05
15:39
можно так...
1. выбираешь доки в СЗ...
2. генеришь число от 1 до Размера списка...
3. док перемещаешь из СЗ куда надо
4. проверяешь на количество доков... если макс не достигнут, тогда шаг 2
11 DjSpike
 
03.12.05
15:39
skunk огромное спасибо за алгоритм. все работает на ура.
12 skunk
 
03.12.05
15:41
спасибо не мне... автор Рупор Абсурда... алгоритм из всех видиных, самый рульный... у богов иначе не бывает...
13 G-Re
 
03.12.05
17:25
На всякий случай. Стандартные генераторы генерят, как правило, числа, равномерно распределенные на интервале (0,1), или (0,N), но если нужно реализавывать другие распределения(плотности), то нужно самому писать соответствующие преобразования равномерно распределенных в нужную плотность.
14 quest
 
03.12.05
17:53
А если вспомнить Кнута, то он говорил что найти алгоритм генерации случайных чисел все равно что попытаться описать Бога арифметикой.

Насколько помню есть несколько алгоритмов генерации криптографически стойкой последовательности чисел. В книжке "Прикладная криптография" Брюса Шнайдера они были
15 skunk
 
03.12.05
17:58
Кнут... UTF8 и 1С... хм...
16 quest
 
03.12.05
18:28
(15) Причем здесь хм? Каждый день разные задачи. А UTF, flex, doxygen - это для субя. Кнута изучал в универе
17 skunk
 
03.12.05
18:31
ясно... просто я Кнута не изучал... точнее в универе не учился..
18 NS
 
03.12.05
18:40
(3,12) В его алгоритме есть ошибка - из за неё (постоянное увеличение GlSeed)
со временем (с каждой следующей генерацией) алгоритм замедляется, и со временем - у него всё сильнее уменьшается период....
19 NS
 
03.12.05
18:42
Как написать генератор случайных чисел на 1С?
Вот здесь - его подправленный алгоритм.
Функция random()    
  // выдает случайное число 0 <= rand < 1
  // интерпретация интерпритации AVB
  // выдает последовательности лучше, и работает быстрее.
  // (не замедляется)
  // дело в том, что у него возникают очень большие числа,
  // а 1С некокорректно с ними работает (операция %)
  randSeed=(randSeed*1103515245+12345)%2147483648;
  возврат randSeed/2147483648;
КонецФункции
20 skunk
 
03.12.05
18:43
(18)в тех задачах, что использовал его хватало... да и зачем он реально нужен для задач решаемых в 1С...
21 skunk
 
03.12.05
18:44
(19)спасибо... исправим...
22 NS
 
03.12.05
18:44
(20) В задачах решаемых на 1С генератор псевдослучайных чисел действительно бывает нужен.
23 skunk
 
03.12.05
18:45
(22)например...
24 NS
 
03.12.05
18:48
(23) Например метод Монте-Карло.
Затем любые способы мухлежа (чтоб в глаза не бросалось)
25 G-Re
 
03.12.05
18:49
(22) 1C - это одно из средств материализации мыслей, поэтому, если в мыслях есть RND, Sin, Log... и пр. математика, нужно уметь их реализовывать.
26 skunk
 
03.12.05
18:54
теория чисел... разложения на множители... зачем это в 1С... не понимаю...
27 skunk
 
03.12.05
19:35
(24)нашел книжку "Monte Karlo Methods in Finance" для оценки финансовых рисков... не ужто в 1С такие вещи делаешь...


все таки она не много для другого орентирована...
28 AAAChel
 
03.12.05
21:01
(11)а если не секрет, что за постановка задачи, просто интересно. Зачем псевдослучайная выборка документов? Аудиторы и органы вроде из ящика бумажные доки вынимают.
(27)Мне тоже кажется, что для этих целей надо пользоваться мощными специализированными программами, одно дело число посчитать в интервале (0,1), другое дело статистический анализ
AdBlock убивает бесплатный контент. 1Сергей