Основы. Случайные числа

Перем RandSeed;
Процедура Randomize()
Перем h,m,s;
ТекущееВремя(h,m,s);
RandSeed=h*24+m*60+s;
КонецПроцедуры
Функция Random(n) Экспорт
RandSeed=(13*RandSeed+13849)%65536;
Возврат ((RandSeed%n)+1);
КонецФункции
Процедура Сформировать()
Randomize();
Для нс=1 по 20 Цикл
сообщить(Random(10));
КонецЦикла;
КонецПроцедуры
Или еще вариант:
Ранд=_GetPerformanceCounter()%(х+1); //х – предел значения случайного числа от 0 до х;
Вот очень качественный алгоритм от комитета ANSI-C. Работает правда медленнее чуть-чуть, чем те, что выше, зато последовательности выдает просто замечательные.
_getPerformanceCounter() для совместимости с “1С:Совместимо” можно заменить на то, что выше.
var randSeed export;
// **************
function randomize() export
randSeed=_getPerformanceCounter();
endFunction
// **************
function random(n) export
randSeed=randSeed*1103515245+12345;
return ((randSeed/65536)%32768)%n+1;
endFunction
И ещё один алгоритм:
Перем GlSeed;
//———————————————
//Алгоритм 133a (Алгоритмы выпуск ?4 под редакцией Агеева. Вычислительный центр АН СССР. 1967)
Функция СлучайноеЧисло(N)
m35=34359738368;
m36=68719476736;
m37=137438953472;
GlSeed=5*GlSeed;
Если GlSeed>=m37 Тогда GlSeed=GlSeed-m37 КонецЕсли;
Если GlSeed>=m36 Тогда GlSeed=GlSeed-m36 КонецЕсли;
Если GlSeed>=m35 Тогда GlSeed=GlSeed-m35 КонецЕсли;
Возврат Цел(GlSeed/m35*N)+1;
КонецФункции

| опубликовано: 25 Май 2009, 19:22

Комментирование этой статьи закрыто