Utilização do java.util.Random

6 respostas
A

Bom dia,

Preciso entender porque o código abaixo trás como resposta um valor numérico aproximado de PI?

public class Main {

private static final int QUANTIDADE_NUMEROS = 1000;

public static void main(String[] args) {

java.util.Random r = new java.util.Random();

int n = 0;

for(int i = 0; i < QUANTIDADE_NUMEROS; i++) {

double x = r.nextDouble();

double y = r.nextDouble();

if(x<em>x + y</em>y <= 1) {

n = n + 1;

}

}

System.out.println(4.0 * n / 1000);

}

}

6 Respostas

Marck

Olá!

Olha sou péssimo em matemática mas talvez seja por causa dos limites dos numeros. O Random esta retornando um numero de 0 a 1 e é feito o mesmo calculo sempre 1000 vezes. Então, acho que sempre vai dar um numero por volta de 3.xxxx.

Seria isso?

A

Eu acho que o caminho é este, mas gostaria de saber qual é a regra usada, pra mim sempre ter este valor

pmlm

Conheces o círculo trigonométrico?

Imagina o seguinte: se tiveres o circulo trigonométrico e um quadrado com os vértices em[-1, -1], [-1, 1], [1, 1], [1,-1] vais ficar com um circulo dentro dum quadrado. Quadrado esse que vai ter área 4 e o círculo área PI. Se escolheres aleatoriamente um ponto dentre desse quadrado, qual a probabilidade de ele também calhar no círculo? PI/4

É isso que esse método faz, sorteia pontos e conta os que calhariam dentro do círculo. Multiplicando por 4 como é feito no final, dará aproximadamente PI.

A

Obrigado … é isto mesmo.

Marck

pmlm:
Conheces o círculo trigonométrico?

Imagina o seguinte: se tiveres o circulo trigonométrico e um quadrado com os vértices em[-1, -1], [-1, 1], [1, 1], [1,-1] vais ficar com um circulo dentro dum quadrado. Quadrado esse que vai ter área 4 e o círculo área PI. Se escolheres aleatoriamente um ponto dentre desse quadrado, qual a probabilidade de ele também calhar no círculo? PI/4

É isso que esse método faz, sorteia pontos e conta os que calhariam dentro do círculo. Multiplicando por 4 como é feito no final, dará aproximadamente PI.

Essa é a tal da Teoria do Caos?

WellingtonRamos

O Random tesnta equilibrar os resultados que gera.
Neste caso, ele acaba excluindo cerca de 25% resultados (valores maiores). Assim, multiplicando esse valor por 4.0 acaba sendo aproximadamente 3.

Coloquei uns prints no seu código:
public class Main {
	private static final int QUANTIDADE_NUMEROS = 1000;

	public static void main(String[] args) {
		java.util.Random r = new java.util.Random();
		int n = 0;
		for (int i = 0; i < QUANTIDADE_NUMEROS; i++) {
			double x = r.nextDouble();
			double y = r.nextDouble();
			System.out.print(x + " , " + y + " -->\t");
			System.out.println((x * x) + " + " + (y * y) + " = " + (x * x + y * y));
			if (x * x + y * y <= 1) {
				n = n + 1;
			}
		}
		System.out.println("4.0 x " + n + " / 1000 = " + (4.0 * n / 1000));
	}
}

(PS: Use a tag [ code ] ao postar seu código ;)

Criado 14 de maio de 2010
Ultima resposta 14 de mai. de 2010
Respostas 6
Participantes 4