Имя: Пароль:
1C
 
Правильный генератор случайных чисел
0 PowerBoy
 
13.07.06
11:51
Использовал генератор Волшебника.
Оказалось крайние числа диаппазона выпадают в двое реже остальных.
Исправил вот так:

В 8.0 для получения случайных чисел можно использовать встроенный генератор GUID. Вот пример простенькой функции:

//только для целых чисел
Функция ПолучитьСлучайноеЧисло(Мин,Макс)
   
   //вместо Randomize
   Для н = 1 По 100 Цикл
       Уник = Новый УникальныйИдентификатор;
   КонецЦикла;
   
       //генерируем GUID
   Уник = СокрЛП(Новый УникальныйИдентификатор);

       //оставляем только цифры
   Уник = СтрЗаменить(Уник,"-","");
   Уник = СтрЗаменить(Уник,"a","");
   Уник = СтрЗаменить(Уник,"b","");
   Уник = СтрЗаменить(Уник,"c","");
   Уник = СтрЗаменить(Уник,"d","");
   Уник = СтрЗаменить(Уник,"e","");
   Уник = СтрЗаменить(Уник,"f","");

   //знаменатель должен иметь такое же количество нулей + 1
   Знаменатель = 10;
   Для н = 2 По (СтрДлина(СтрЗаменить(Уник,Символы.НПП,""))) Цикл
       Знаменатель = Знаменатель * 10;
   КонецЦикла;
   
   Случ = Число(Уник) / Знаменатель; //здесь получается дробное случайное число от 0 до 1
   
   //преобразуем его в случайное число из заданного интервала, округляем до целого
   //ЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*Случ),Мин),Макс);
   
// Делаем правильно вот так, т.к. по предыдущей формуле крайние значения выпадают в 2 раза реже.
   ЧислоИзИнтервала = Цел(0.5 + (Макс - Мин + 1) * Случ) + Мин - 1;
   Если ЧислоИзИнтервала = Мин - 1 Тогда
        ЧислоИзИнтервала = Макс;
   КонецЕсли;

   Возврат ЧислоИзИнтервала;

КонецФункции
1 ТелепатБот
 
гуру
13.07.06
11:51
2 ZyXEL
 
13.07.06
11:52
Где же Гений 1С..
3 GROOVY
 
13.07.06
12:16
Ниче! в 8.1 будет нормальный генератор!
4 Advan
 
13.07.06
12:19
НАкой в 1с генератор случайных чисел? типа суммы в отчеты подставлять случайные?
5 lift
 
13.07.06
12:21
А для чего ты использушь генератор случайных чисел?
6 RomaH
 
naïve
13.07.06
12:24
(4) прогнозирование, например можно забабахать
7 Salvador Limones
 
13.07.06
12:25
(6) Ага, точно, например планирование закупок. Чтобы каждый раз были разные данные. :-)
8 RomaH
 
naïve
13.07.06
13:02
(7) ты может не в курсе, что перед тем как спрогнозировать, надо нарисовать функцию на основе реальных данных
так вот, нарисовать функцию которая на 100% соответсвовала бы реальным данным мыне сможем, а вот если предположить что в реальных данных есть белый шум ...
то все ОК
мы такой мурой целый год в универе занимались
преподы вроде как писали прогу для ... управляемых снарядов
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан