SImulando um Math.Random()

Ae pessoal,

alguem tem ideia se eh possivel fazer 1 classe q trabalhe igual a math.random()??
Caso sim, pode dar 1 ideia de como gerar numeros aleatorios???

Flw

Slask no livro aki está escrito que random é um metodo e math é uma class … tem outras paginas do livro sobre Math.random() to zoiando

sabia que eu ia achar … todos nós conhecemos a classe math para gerar numeros aleatorios, mas java fornece outras extensas capacidades para geração de numéros aleatorios na classe Random…

um novo gerador de números aleatorios pode ser criado utilizando Random r = new Randow ();

E para criar um gerador de numeros pseudoaleatorios com “repetividade” utilize :

 Random r = new Randow ( seedValue); 

beijos

Espero ter ajudado

[quote=“Angel”]sabia que eu ia achar … todos nós conhecemos a classe math para gerar numeros aleatorios, mas java fornece outras extensas capacidades para geração de numéros aleatorios na classe Random…

um novo gerador de números aleatorios pode ser criado utilizando Random r = new Randow ();

E para criar um gerador de numeros pseudoaleatorios com “repetividade” utilize :

 Random r = new Randow ( seedValue); 

beijos

Espero ter ajudado[/quote]
8O

Não sabia disso…Boa,Angel

Sim, mas o q eu quero fazer eh entender como o math.random funciona, e pra isso eu quero fazer 1 classe q seja geradora de numeros aleatorios e q nao use nenhum metodo de gerar numeros aleatorios ja existentes no java…

flw

tipow, se tah meio que querendo saber o código dela?

pelo que eu sei, todo o procedimento random em todas as linguagens buscam os valores no relógio do computador

ou seria no processador?

sei lah…

em algum lugar ele pega o numero
e esse lugar sempre tem um numero diferente

Ou vc tb pode pegar informações de memória… tem algoritmos que é implementado assim. Em C é mais de pegar lixo da memória… hehehehehe

Busca do relogio mesmo … mas o que o nosso amigo quer é saber se :[color=“red”] tem como criar um metodo que naum seja random e que naum exista em java[/color] …

sei lá acho que se tiver vai ficar parecido com o random

beijos

Angel

A idéia é a seguinte. O primeiro número é uma semente, e todos os outros números são gerados a partir do anterior.

Veja só, seja n a quantidade de números a ser gerada
a, c, m são inteiros quaisquer.

Logo, uma série pseudorandômiga seria:

x[0] = semente
x[n] = (a*x[n-1] + c) modulo m

Obs: Bons números para ‘a’ e ‘m’ são (para um computador de 32 bits):
a = 7^5
m = 2^32 - 1

Esses valores para a e m são bons pq geram uma sequencia com função densidade de probabilidade quase uniforme, ou seja, cada número gerado tem a mesma chance de ser gerado.

Se a semente for fixa, sua série sempre será a mesma. O que o pessoal faz é usar a hora atual como semente. Em java, vc pega isso como um new Date().getTime(), que retorna um long que representa o número de milisegundos desde 1/1/1970 (acho q é isso mesmo).

A idéia é essa, são aquelas duas linhas lá de cima mesmo.

[]'s
carisio

JavaTeco,

em C vc fornece a semente tb, que função é essa que vc viu que pega lixo da memória? Esso não é certo…

[]'s


microfilo,

A idéia é vc fornecer a semente e não a linguagem. A semente pode vir de qualquer lugar. O idéia é que a semente seja realmente randômica, como por exemplo a entrada do microfone (o som tem um aspecto randomico, pelo menos vc não controla…).

Em VB por exemplo, pelo menos na época que eu usava, vc chamava a função rnd e ela sempre te retornava o mesmo resultado, pra mudar a semente vc chamava o randomize.

[]'s
carisio

ae…eu axo q o melhor jeito eh pegar numeros do relogio do pc msm!!!
flws

Dependendo do tipo de problema que se tem, pegar o valor do relógio não resolve, pois como bem disse o carisio, tem que ter uma função plana, que com filtragem adequada pode virar uma curva gaussiana ou uma curva assimétrica (ruído rosa). As funções pseudo-aleatórias implementadas na classe Random têm esse comportamento e cedo ou tarde, para uma mesma semente, começam a repetir a sequência numérica.

Uma outra categoria de funções pseudo-aleatórias é usada para criptografia. Neste caso, a busca não é por uma curva uniforme, mas para obter a maior dízima periódica possível.

[quote=“carisio”]JavaTeco,

em C vc fornece a semente tb, que função é essa que vc viu que pega lixo da memória? Esso não é certo…

[]'s

[/quote]

Primeiro, eu apenas vi um programa (que não foi eu que crie) que pegava lixo da memória. As vezes me expressei mal, mas digo lixo da memória, como sendo posições com conteúdo que não fazem sentido quando são pegos (e nem precisam fazer) e é feitos algumas transformações para gerar o número…

Realmente me expressei mal… :oops:

Porque não é certo?

JavaTeco,

qdo vc disse lixo de memória, imaginei o programadou tentando acessar uma área da memória qualquer, e isso pode dar pau se já estiver sendo utilizada por outro programa. Mas sei lá, tem muita coisa além de minha compreensão. :grin:

[]'s
carisio

Em situações muito especiais, é necessário uma sequência realmente aleatória.

Uma maneira de obtê-la consiste no seguinte: o ruído térmico de uma junção PN reversamente polarizada é amplificado e digitalizado. Este sinal aleatório é então normalizado através de software. Um artigo da revista DDJ, Unbiasing Random Bits, de abril de 2002, mostra como fazer isso

O algoritmo (e não o artigo) pode ser visto em:

http://www.ddj.com/ftp/2002/2002_04/aa0402.txt