Geração de números aleatórios uniformemente distribuídos (0,1) - página 10

 
alsu >>:

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

Você viu que não é um PRNG, é um RNG? :)

 
SProgrammer >>:

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

O RNG difere do PRNG por ter uma fonte de entropia (ou seja, aleatoriedade independente do algoritmo de geração utilizado). No meu exemplo está presente - neste caso, é um contador de relógio.

 
alsu >>:

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

Estou apenas falando, desculpe, sobre o que eu liguei. E como utilizá-lo. :) Não é um PRNG, é um RNG. :)


Mas em geral, não se fala de nada - qualquer gerador que não utilize fontes externas não é um gerador de números aleatórios, mas apenas pseudo. QUALQUER UM :)

 
Muito bem, a aleatoriedade absoluta é uma abstração matemática. Há apenas um grau de aproximação, bem, e um grau de consciência do objeto.
 
if(MathRand()+1>16383.5){rand+=MathPow(2,- i);

gumgum, MathPow() é uma função extremamente lenta. Recentemente publiquei um estudo. E aqui você tem um grau inteiro, e é um número natural. Escreva um emulador inteligente do natural no grau natural.

 

1000000 números rstep=32 rsign=1 velocidade = 4,97700000

if(MathRand()+1>16383.5){rand+=MathPow(2,- i);}
1000000 números rstep=32 rsign=1 velocidade = 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);
}




 
Alguém pode fazer um dll, por exemplo, da Random Number Generation? Obrigado.
 
gumgum >>:
Может кто нибудь сделает dll например из Генерация случайных чисел? Спасибо.

e não por sua conta?

 
alsu >>:

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


Eu não sei como criar uma dll. Estou baixando o VS agora, eu vou descobrir e escrever. Quem já criou uma dll não é tão difícil (acho que sim) se as fontes estiverem todas disponíveis....
 
gumgum >>:


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

há um artigo recente no quinto fórum sobre este assunto, todos para iniciantes com fotos e exemplos