Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 03:50

Очень необычный Рандом (ГСЧ) - и загадочные баги

Автор ferrari314, 17 мар 2015, 15:25

0 Пользователей и 1 гость просматривают эту тему.

ferrari314

Всем привет.
Вот такой стандартный рандом:
&НаСервере
Функция Рандом(НижняяГраница,ВерхняяГраница)
СлЧисло = новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
Возврат СлЧисло.СлучайноеЧисло(НижняяГраница,ВерхняяГраница);
КонецФункции


Должен: создать заданное количество рандомных лиц из массивов славарей.
БАГА: много дублирующих значений ПО СТРОКАМ:
ЦитироватьИванов Петр Юрьевич
Иванов Петр Юрьевич
Иванов Петр Юрьевич
Петрова Ольга Ивановна
Петрова Ольга Ивановна
Антонов Антон Юрьевич
Сидорова Наталья Андреевна
из 10 строк может совпадать (полностью) 3-5 и даже 7!!
то есть рандом срабатывает хреново, при том что на каждом шаге вызывается заного

Что пробовал: поставил рандом не на секунды а на милисекунды - результат не ясен.
Увеличил значения словарей в 2 раза (по 20 имен, фам и отч на МУЖ и по 20 на Ж (итого вариации = 20^6) - дубли не уменьшились. Ощущение, что рандом проходит слишком быстро.

У кого какие мысли?

вот код

Работает вот так:
Процедура СоздатьНаСервере()
ФизЛицо = Справочники.ФизЛица.СоздатьЭлемент();
Если Рандом(1,2) <> 1 Тогда
Физлицо.Имя = ИменаМ()[Рандом(0,19)];
Физлицо.Фамилия = ФамилииМ()[Рандом(0,19)];
Физлицо.Отчество = ОтчестваМ()[Рандом(0,19)];
Иначе
Физлицо.Имя = ИменаЖ()[Рандом(0,19)];
Физлицо.Фамилия = ФамилииЖ()[Рандом(0,19)];
Физлицо.Отчество = ОтчестваЖ()[Рандом(0,19)];
КонецЕсли;
Физлицо.Наименование = Физлицо.Фамилия+" "+ФизЛицо.Имя+" "+ФизЛицо.Отчество;
Физлицо.Записать();


Ну и вызов
&НаКлиенте
Процедура СоздатьФизлиц(Команда)
Для счетчик=1 По КоличествоФизлиц Цикл
СоздатьФизлицНаСервере();
КонецЦикла;
КонецПроцедуры


cska-fanat-kz

Цитата: ferrari314 от 17 мар 2015, 15:25то есть рандом срабатывает хреново, при том что на каждом шаге вызывается заного

а кто вам обещал что рандом будет выдавать каждый раз уникальное значение?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

ferrari314

Ну должно быть хотя бы более-менее разное. У меня на 10 сотрудников выходит такой ряд:
Цитировать2,12,12,12,
2,10,10,10,
1,3,3,3,
2,14,14,14
2,14,14,14
2,14,14,14
Это вообще не рандом!!
результат рандома совпадает в блоках (3 вызова подряд(на ФИО) иногда и повторяется по 3-4 раза на сотрудников.
У меня ощущение что я что-то упустил.

cska-fanat-kz

а если без параметра?
т.е.
новый ГенераторСлучайныхЧисел();
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

ferrari314

тогда все еще хуже. совпадений становится много больше.
иванов АА, иванов АА, иванов АА, петров ББ, петров ББ, сидоров ВВ, сидоров ВВ, сидоров ВВ

Slin

Попробуйте создать ГСЧ только один раз, а в цикле вызывать только СлучайноеЧисло()
переписать, конечно, придётся слегка
skype: slin-dev

Теги:
Рейтинг@Mail.ru

Поиск