• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Vernute

Algoritmo gerador de números pseudo aleatórios em vírgula flutuante.

5 mensagens neste tópico

Aviso desde já que não são um perito nem nada que se pareça na área, mas a minha opinião é esta:

Em lado nenhum referes o conteúdo de bn. É a parte inteira de Xn? Vou assumir que sim.

Não me parece demonstrada a periodicidade. Repara que não há qualquer impedimento que bn seja igual a bm para n!=m. (segundo o que assumi acima, o valor de B flutua)

Por exemplo:

A0 = 1.333 => B0 = 1, X0 = 0.333

A1 = 0.333*1.333 = 0.443889 => B1 = 0, X1 = 0.443889.

Para n != m, Bn pode ser igual a Bm, assim como Xn e Xm.

Falta também demonstrar que os resultados são uniformes no intervalo }0, 1{, não chega demonstrar que os bytes são aleatórios.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Warrior...

Obrigado pelo tua opinião.

Quanto a b(0), ele é um número inteiro qualquer, por exemplo, 1; 123; 45364 ou outro qualquer, não necessariamente a parte inteira de x(n) e consequentemente, b(n) vai crescendo com (n) como podes ver abaixo:

b(1)=b(0)+1

b(2)=b(0)+2

b(3)=b(0)+3

...

Exemplo:

Se n=10; m=23 e b(0)=100

Então para (n) temos:

b(10)=100+10=110

E para (m):

b(23)=100+23=123

Como a condição é, (m) ser sempre maior que (n),  implica sempre que b(m) seja também sempre maior do que b(n).

Logo, como b(m)>b(n) e necessariamente diferentes entre si, implica que os números seguintes ao número comum e repetido nas séries (n) e (m), sejam também eles diferentes entre si.

Talvez a página em inglês, seja mais esclarecedora, pois tem exemplos em código, que penso serem mais explicativos.

Quanto à demonstração matemática da uniformidade na distribuição do intervalo }0,1{, de facto não a fiz. E não a fiz em virtude de a mesma estar resolvida (penso) com os resultados obtidos pelos testes estatísticos efectuados com os programas ENT e DIEHARD, os quais no seu conjunto, já a contemplam.

Um abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe um erro no pseudo-código? É usado tanto o "a" como o "x", parecem-me equivalentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Correcto.

No código onde se lê:

a=0.2353

deverá ler-se

x=0.2353

Mais tarde irei corrigir o texto.

Obrigado. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora