Geração de números aleatórios

A forma mais comum de se obter números pseudorandômicos em um computador digital é usando o seguinte gerador:

{R}_{i} = (A{R}_{i-1}+C) mod M, i = 1, 2, 3, ...

onde {R}_{0} é a semente, ou valor inicial, M o divisor, C uma constante aditiva e A um multiplicador. A notação mod M significa que a aritimética é feita módulo M, ou seja, {R}_{i} é o resto da divisão de A{R}_{i-1}+C por M. A seqüência resultante terá boa propriedades estatísticas e produzirá longas seqüências sem repetição dependendo dos números escolhidos.

Bons valores para M, Asão:

M = {2}^{31}

A = 764261123

{R}_{0} é escolhido como um número ímpar.

A implementação dessa rotina em matlab é

R0=1;
A=764261123;
C=0;
M=2^31;

R=zeros(1000,1);
R(1)=mod(A*R0+C,M);
for i=2:1000
R(i)=mod(A*R(i-1)+C,M);
end

plot(R);

Esse mesmo código, em linguagem Java, é

double[] R = new double[1000];
double A=764261123;
double C=0;
double M=Math.pow(2, 31);

R[0] = 1;
for (int i=1; i<1000; i++)
R[i]=(A*R[i-1]+C) % M;

Cabe ressaltar que esse gerador é um gerador de números pseudorandômicos. Isso significa que, dada as mesmas condições (semente, A, C e M), a mesma seqüência será gerada. Verdadeiros geradores randômicos devem usar eventos realmente randômicos, como por exemplo o ruído de dispositivos eletrônicos ou o sinal captado por um microfone em um ambiente natural.

Fonte: Random Signal Analysis in Engineering Systems, John J. Komo

Tags: , , , , ,

Uma resposta to “Geração de números aleatórios”

  1. joaquim eduardo Says:

    muito bom

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: