Генерация равномерно распределенных случайных чисел (0,1) - страница 10

 
alsu >>:

Вы не правы, если стоит задача обеспечить генерацию последовательности СЧ заданной разрядности (заранее неизвестной), о чем и спрашивал топикстартер, то важна именно случайность - только тогда можно получать последовательности чисел с разрядностью по выбору и с "хорошими" характеристиками. Если же комбинировать значения, выдаваемые генератором ГПСЧ, то характеристики процесса не будут в общем случае "хорошими" и тот же DIEHARD он скорее всего не пройдет.

Вы видели что это не ГПСЧ, а именно ГСЧ? :)

 
SProgrammer >>:

Вы видели что это не ГПСЧ, а именно ГСЧ? :)

ГСЧ отличается от ГПСЧ наличием источника энтропии (т.е. случайности, не зависящей от используемого алгоритма генерации). В приведенном мной примере он присутствует - в данном случае это счетчик тактов.

 
alsu >>:

ГСЧ отличается от ГПСЧ наличием источника энтропии (т.е. случайности, не зависящей от используемого алгоритма генерации). В приведенном мной примере он присутствует - в данном случае это счетчик тактов.

Я говорю, простите только про то ссылку на что я приводил. И про то как это использовать. :) Там НЕ ГПСЧ а ГСЧ. :)


Но вообще разговор ни очем - любой генератор не использующий внешние источники не является генератором СЛУЧАЙНЫХ чисел, а только псевдо. ЛЮБОЙ :)

 
Совершенно верно, абсолютная случайность - математическая абстракция. Есть только степень приближения к ней, ну и степень осведомлённости о объекте.
 
if(MathRand()+1>16383.5){rand+=MathPow(2,-i);

gumgum, MathPow() - крайне медленная функция. Я недавно исследование выкладывал. А тут у тебя как раз целая степень, да и возводится в нее натуральное число. Напиши умный эмулятор возведения натурального в натуральную степень.

 

1000000 чисел rstep=32 rsign=1 speed = 4.97700000

if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
1000000 чисел rstep=32 rsign=1 speed = 2.44900000
double ranD(int rsign,int rstep)
{
double div=2;
double rand=0; 
   for(int i=1;i<=rstep;i++)
   {
   //if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
   if(MathRand()+1>16383.5){rand+=1/div;}
   div=div*2;   
   }
      if(rsign==1)
         {
         rand=2*rand-1;
         }
return(rand);
}




 
Может кто нибудь сделает dll например из Генерация случайных чисел? Спасибо.
 
gumgum >>:
Может кто нибудь сделает dll например из Генерация случайных чисел? Спасибо.

а самостоятельно нэ?

 
alsu >>:

а самостоятельно нэ?


Я не умею создавать dll. Сейчас качаю VS, разберусь и напишу. Просто кто уже создавал dll это не так уж сложно(я так думаю) если исходники все имеются....
 
gumgum >>:


Я не умею создавать dll. Сейчас качаю VS, разберусь и напишу. Просто кто уже создавал dll это не так уж сложно(я так думаю) если исходники все имеются....

на пятом форуме есть свежая статья на эту тему, там все для начинающих с картинками и примерами

Причина обращения: